【问题标题】:How to respond to password prompt when using SCP in a shell script?在 shell 脚本中使用 SCP 时如何响应密码提示?
【发布时间】:2010-11-30 13:00:56
【问题描述】:

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

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


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

【问题讨论】:

标签: shell passwords scp prompt keyboard-events


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为你不能轻易做到这一点。你可以做的是使用公钥认证。

    类似的东西

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

    (或dsa)。

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

    【讨论】:

    • 服务器和一切都是学校设置的,我无法控制那个设置
    • 这些设置在您的主目录中。
    【解决方案3】:

    考虑使用密钥或外部库。

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

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

    再次,我强烈推荐钥匙。

    【讨论】:

    • 来吧,自动蛮力攻击也可以使用库来完成;-)
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        【讨论】:

          【解决方案7】:

          你没有说你在家里和学校使用哪个平台。假设 Linux、Cygwin 或 OS/X,您有多种选择:

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

          对于选项(1),你会

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

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              使用“sshpass”!

              #!/bin/bash
              sshpass -p "password" scp -r /some/local/path user@example.com:/some/remote/path
              

              【讨论】:

              • sshpass 看起来很有趣。在一个不能很好地使用 SSH 密钥的系统上工作,这样就可以了。谢谢!
              【解决方案10】:

              正如许多人已经说过的那样,使用 ssh 密钥将是最安全和最好的方法。 如果还有其他人还在犹豫并寻求帮助,在 Ubuntu 帮助中,有一个快速直接的 way 可以使用 ssh 密钥。

              【讨论】:

                【解决方案11】:

                按照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 命令。

                【讨论】:

                  【解决方案12】:

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

                  【讨论】:

                    猜你喜欢
                    • 2015-09-02
                    • 1970-01-01
                    • 2017-04-23
                    • 2017-03-14
                    • 1970-01-01
                    • 2011-12-28
                    • 1970-01-01
                    • 2012-04-28
                    • 1970-01-01
                    相关资源
                    最近更新 更多