我是shellcripting的新手(并且在Linux世界中没有很好的旅行)并且正在尝试使用我的给定的shell脚本自动登录到sftp服务器。现在这是我已经走了多远
#!/bin/bash
HOST='somehost.com'
USER='someusername'
PASSWD='somepass'
sftp $USER@$HOST
现在这是我遇到麻烦的地方。此时我将被提示输入密码。那么如何让脚本在提示时自动回复密码?我也尝试过使用sftp命令传递密码的方法,但没有运气。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
使用此代码:
#!/bin/bash
HOST='somehost.com'
USER='someusername'
PASSWD='somepass'
echo $PASSWD | sftp $USER@$HOST
答案 1 :(得分:2)
在命令行或此类脚本中包含密码不是一个好主意。任何有权访问正在运行的进程列表的人都可以看到您的密码,最终可能会出现在您的shell历史记录和日志文件中。所以这会造成安全漏洞。
this thread中有更多信息,建议使用基于密钥的身份验证。
答案 2 :(得分:2)
不要将密码存储在脚本文件中,除非您强烈要求保持权限绝对紧密。
对于所有ssh / sftp / scp,使用公钥认证。了解您可以在客户端和服务器端设置的设置,以使其更安全(IP限制,用户限制,密码限制,重试次数,同时登录次数等)仅此一项应消除大量不安全因素脚本问题。
如果您绝对必须在变量中存储密码,请不要将其导出,并在完成使用后取消设置。
答案 3 :(得分:1)
在本地主机上(将执行脚本)生成ssh密钥对:
scriptuser @ scripthost:/〜$ ssh-keygen -t rsa 生成公钥/私钥rsa密钥对。 输入要保存密钥的文件(/home/michal/.ssh/id_rsa):{按ENTER!} (...)
将生成的公钥从scripthost复制到somehost.com并将其附加到经过身份验证的主机列表中:
scriptuser @ scripthost:/〜$ cat~ / .ssh / id_rsa.pub | ssh someuser@somehost.com'cat>>的.ssh / authorized_keys的
现在你应该能够使用没有密码的scp或sftp:
scriptuser @ scripthost:/〜$ scp / any / local / file someuser@somehost.com:/ remote / location /
答案 4 :(得分:0)
使用sshpass命令。 你可以输入密码和命令