首先,我很清楚有很多关于这个话题的问题。我已经阅读了它们,但仍然可以为我的情况找到一个合适的答案。
我想使用 shell 脚本从本地到学校主目录scp
的整个目录。~/cs###/assign1
我的问题是,我的脚本中有没有办法等待密码提示,然后模拟键盘事件来“输入”我的密码?
这是有关如何设置密钥的非常详细的指南
使用“sshpass”!
#!/bin/bash
sshpass -p "password" scp -r /some/local/path user@example.com:/some/remote/path
不允许使用 ssh 密钥吗?那将是一个更好的解决方案。
我认为你不能轻易做到这一点。您可以做的是改用公钥身份验证。
沿着这些思路
ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"
(或dsa
)。
但是,嘿,这不是服务器故障,是吗?;-)
考虑使用密钥或外部库。
我不认为这是可能的(我希望我没有错),因为它会自动强制入侵和嗅探密码。
有些库可以做你想做的事(使用 SFTP 协议,而不是调用 scp),例如libssh。
同样,我强烈推荐钥匙。
我同意你应该使用密钥。但是,如果您想在纯文本脚本文件中硬编码密码, expect可以自动化该过程的交互方面。
像这样的东西 - http://code.google.com/p/enchanter/?
你不会说你在家里和学校使用哪个平台。假设 Linux、Cygwin 或 OS/X 你有几个选择:
对于选项 (1),您将
对于第二个选项,ssh-agent 允许您在每个会话中将密码缓存在本地进程中一次。您设置了过期时间
一旦按照此处ssh-keygen
的说明进行设置,您就可以执行
scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
id_rsa
设置中生成的本地密钥在哪里ssh-keygen
。
如果你想减少每次打字,你可以修改你的.bash_profile
文件,把
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
然后从你的终端做source ~/.bash_profile
. 之后,如果您remote_scp
在终端中键入,它应该在scp
没有密码的情况下运行该命令。
如果您可以从 Windows 机器上挂载目录(例如,通过我大学的 Windows 实验室所做的 AFS、NFS 或 SMB),您可以使用带有 -pw 开关的pscp 。
为什么不直接使用“-r”选项递归地复制它呢?还是使用 rsync 代替?
您还可以使用公钥身份验证,只要您拥有实际的用户帐户,就不需要他们的帮助。看到这个
正如许多人已经说过的那样,使用 ssh 密钥将是最安全和最好的方法。如果还有其他人仍然想知道并寻求帮助,在 Ubuntu 帮助中,有一种快速直接的方式来使用 ssh 密钥。
我发现无法在我们的系统上自动执行此操作 - 我 ssh 到一个设备,然后 ssh 到下一个设备,在这两个设备上,我都无法安装任何其他软件。所以我只能使用现有的 shell 脚本命令。我可以复制所有类型的文件,例如 *.png,或者在我的脚本文件中一个一个地复制,必须为每个单独的文件输入密码。我所做的一件很有帮助的事情是将密码输入到文件中,将其剪切,然后能够将其粘贴到每个文件的每个提示符中。