在shell脚本中使用SCP时如何响应密码提示?

时间:2009-09-22 20:05:11

标签: shell passwords scp prompt keyboard-events

首先,我很清楚关于这个话题有很多问题。我已经阅读了它们,但仍然可以找到适合我情况的答案。

我想scp使用shell脚本从本地到学校主目录~/cs###/assign1整个{{1}}目录。我的问题是,我的脚本中是否有一种方法可以等待密码提示,然后在我的密码中模拟键盘事件以“输入”?


here是关于如何设置密钥

的详细指南

12 个答案:

答案 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)

答案 5 :(得分:2)

我同意你应该使用钥匙。但如果您想在纯文本脚本文件中对密码进行硬编码,expect可以自动执行流程的交互方面。

答案 6 :(得分:0)

如果你可以从Windows机器上安装目录(例如通过我大学的Windows实验室所做的AFS,NFS或SMB),你可以使用pscp和-pw开关。

答案 7 :(得分:0)

为什么不使用“-r”选项递归复制它?或者改用rsync?

您还可以使用公钥身份验证,只要您拥有实际的用户帐户,就无需任何帮助。见this

答案 8 :(得分:0)

您没有说明您在家中和学校使用的平台。假设Linux,Cygwin或OS / X有几种选择:

  1. 如果是公钥认证 尚未在服务器上关闭
  2. ssh-agent和ssh-add,每次会话输入一次密码
  3. 对于选项(1),您将

    1. 在家中使用生成密钥对 ssh-keygen,没有密码短语 私钥。请注意,如果其他人使用同一台计算机,省略密码可能不是一个好主意,但您的目标是绕过必须输入密码。
    2. 将PUBLIC密钥上传到您的学校 帐户并将其放入 的〜/ .ssh / authorized_keys中
    3. 将scp与“-i identityfile”一起使用 选项,其中identityfile是 私钥的完整路径。或者,在.ssh / config中添加一个条目(参见手册页)
    4. 对于第二个选项,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_rsassh-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,也可以在我的脚本文件中一个接一个地复制文件,而必须输入每个文件的密码。我做过的一件事很有帮助,那就是将密码键入文件,然后将其剪切,然后将其粘贴到每个文件的每个提示中。