首先,我很清楚关于这个话题有很多问题。我已经阅读了它们,但仍然可以找到适合我情况的答案。
我想scp
使用shell脚本从本地到学校主目录~/cs###/assign1
整个{{1}}目录。我的问题是,我的脚本中是否有一种方法可以等待密码提示,然后在我的密码中模拟键盘事件以“输入”?
here是关于如何设置密钥
的详细指南答案 0 :(得分:12)
不允许使用ssh密钥吗?那将是一个更好的解决方案。
答案 1 :(得分:11)
使用“sshpass”!
#!/bin/bash
sshpass -p "password" scp -r /some/local/path user@example.com:/some/remote/path
答案 2 :(得分:4)
我认为你不能轻易做到这一点。你可以做的是使用公钥认证。
沿着这些方向的东西
ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"
(或dsa
)。
但是,嘿,这不是服务器故障,是吗? ; - )
答案 3 :(得分:4)
考虑使用密钥或外部库。
我不认为这是可能的(我希望我没有错),因为它强加了自动强力入侵和嗅探密码。
有些库可以做你想要的(使用SFTP协议,而不是调用scp),例如libssh。
同样,我强烈推荐密钥。
答案 4 :(得分:2)
这样的事情 - http://code.google.com/p/enchanter/?
答案 5 :(得分:2)
我同意你应该使用钥匙。但如果您想在纯文本脚本文件中对密码进行硬编码,expect可以自动执行流程的交互方面。
答案 6 :(得分:0)
如果你可以从Windows机器上安装目录(例如通过我大学的Windows实验室所做的AFS,NFS或SMB),你可以使用pscp和-pw开关。
答案 7 :(得分:0)
为什么不使用“-r”选项递归复制它?或者改用rsync?
您还可以使用公钥身份验证,只要您拥有实际的用户帐户,就无需任何帮助。见this
答案 8 :(得分:0)
您没有说明您在家中和学校使用的平台。假设Linux,Cygwin或OS / X有几种选择:
对于选项(1),您将
对于第二个选项,ssh-agent允许您在每个会话中将密码缓存在本地进程中一次。您设置了到期时间
答案 9 :(得分:0)
许多人已经说过使用ssh密钥是最安全和最好的方法。 如果其他人仍然想知道并寻求帮助,在Ubuntu帮助中有一个快速而直接的way来使用ssh密钥。
答案 10 :(得分:0)
按照here说明设置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
命令而不使用密码。
答案 11 :(得分:0)
我找不到在我们的系统上自动执行此操作的方法-我将ssh放入一个设备,然后再SSH到下一个设备,在这两个设备上,我都无法安装任何其他软件。因此,我只能使用现有的Shell脚本命令。我可以复制一个类型的所有文件,例如* .png,也可以在我的脚本文件中一个接一个地复制文件,而必须输入每个文件的密码。我做过的一件事很有帮助,那就是将密码键入文件,然后将其剪切,然后将其粘贴到每个文件的每个提示中。