11

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

我想使用 shell 脚本从本地到学校主目录scp的整个目录。~/cs###/assign1我的问题是,我的脚本中有没有办法等待密码提示,然后模拟键盘事件来“输入”我的密码?


是有关如何设置密钥的非常详细的指南

4

12 回答 12

15

使用“sshpass”!

#!/bin/bash
sshpass -p "password" scp -r /some/local/path user@example.com:/some/remote/path
于 2012-12-19T15:20:21.503 回答
11

不允许使用 ssh 密钥吗?那将是一个更好的解决方案。

于 2009-09-22T20:08:15.017 回答
4

我认为你不能轻易做到这一点。您可以做的是改用公钥身份验证。

沿着这些思路

ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"

(或dsa)。

但是,嘿,这不是服务器故障,是吗?;-)

于 2009-09-22T20:08:22.290 回答
4

考虑使用密钥或外部库。

我不认为这是可能的(我希望我没有错),因为它会自动强制入侵和嗅探密码。

有些库可以做你想做的事(使用 SFTP 协议,而不是调用 scp),例如libssh

同样,我强烈推荐钥匙。

于 2009-09-22T20:10:50.117 回答
3

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

于 2009-09-22T20:53:46.353 回答
2

像这样的东西 - http://code.google.com/p/enchanter/

于 2009-09-22T20:14:00.303 回答
1

你不会说你在家里和学校使用哪个平台。假设 Linux、Cygwin 或 OS/X 你有几个选择:

  1. 公钥身份验证(如果尚未在服务器上关闭)
  2. ssh-agent 和 ssh-add 每次会话输入一次密码

对于选项 (1),您将

  1. 使用 ssh-keygen 在家里生成一个密钥对,私钥上没有密码。请注意,如果其他人使用同一台计算机,省略密码可能不是一个好主意,但您的目标是避免输入密码。
  2. 将 PUBLIC 密钥上传到您的学校帐户并将其放在 ~/.ssh/authorized_keys
  3. 将 scp 与“-i identityfile”选项一起使用,其中 identityfile 是您的私钥的完整路径。或者,在 .ssh/config 中添加一个条目(参见手册页)

对于第二个选项,ssh-agent 允许您在每个会话中将密码缓存在本地进程中一次。您设置了过期时间

于 2009-09-22T20:21:25.073 回答
1

一旦按照此处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没有密码的情况下运行该命令。

于 2017-10-20T07:12:44.310 回答
0

如果您可以从 Windows 机器上挂载目录(例如,通过我大学的 Windows 实验室所做的 AFS、NFS 或 SMB),您可以使用带有 -pw 开关的pscp 。

于 2009-09-22T20:11:15.890 回答
0

为什么不直接使用“-r”选项递归地复制它呢?还是使用 rsync 代替?

您还可以使用公钥身份验证,只要您拥有实际的用户帐户,就不需要他们的帮助。看到这个

于 2009-09-22T20:11:21.990 回答
0

正如许多人已经说过的那样,使用 ssh 密钥将是最安全和最好的方法。如果还有其他人仍然想知道并寻求帮助,在 Ubuntu 帮助中,有一种快速直接的方式来使用 ssh 密钥。

于 2015-10-13T23:21:51.360 回答
0

我发现无法在我们的系统上自动执行此操作 - 我 ssh 到一个设备,然后 ssh 到下一个设备,在这两个设备上,我都无法安装任何其他软件。所以我只能使用现有的 shell 脚本命令。我可以复制所有类型的文件,例如 *.png,或者在我的脚本文件中一个一个地复制,必须为每个单独的文件输入密码。我所做的一件很有帮助的事情是将密码输入到文件中,将其剪切,然后能够将其粘贴到每个文件的每个提示符中。

于 2018-11-17T04:48:32.353 回答