我想知道如何使用 sftp 自动连接,并在同一命令中将密码作为参数,以自动登录并执行一次。
例子:
我想把它写成一个脚本,并尝试用一句话来完成这项任务。
干杯,
答案1
有四种方法可以实现无密码 ssh/scp:
在客户端上创建一个新的无密码 ssh 密钥,并将其添加到
authorized_keys
服务器上。如上所述,但在密钥上设置密码,并
ssh-agent
在运行 scp 之前使用它来解锁。使用 ssh 连接共享(可能需要进行适当的
ControlPersist
设置)在 scp 运行之前登录到服务器。 scp 将重用相同的连接并且不需要密码。使用一些狡猾的脚本来输入密码,但 ssh/scp 积极阻止这种行为,因此它并不像您希望的那么容易。
我强烈建议您研究前两个选项(选项 2 更安全),如果authorized_keys 不可用,则研究选项 3。有很多地方记录了如何做到这一点。
选项 4 是可能的(我看到其他人已经发布了解决方案),但您需要注意,这会将您的密码泄露给机器的其他用户和/或任何可以读取您的脚本的人。 ssh 密钥受到除 root 用户之外的所有用户的保护,并且受密码短语保护的密钥甚至受到 root 用户的保护(除了 ssh-agent 黑客之外)。
答案2
使用SSH密码
sshpass -p <password> sftp user@host
答案3
运行以下命令:
ssh-keygen -t rsa -b 2048
然后
touch ~/.ssh/config
现在编辑配置,如下所示:
# host-specific options
Host enigma
HostName mydomain.com
Port 2547
ServerAliveInterval 120
User YOURUSERNAME
TCPKeepAlive Yes
现在连接
ssh-copy-id [email protected]
您应该能够使用配置文件中的主机名连接到服务器。 IEssh enigma
我的配置文件中有大约 20 个连接,并且都是短引用,因此我不必每次都输入域和密码。
这样做的安全缺陷是,除非您开始创建不同的主机文件,否则所有 SSH 连接都会受到影响。都在一个文件中。由一个密码保护。因此,如果您将 20 个连接存储到一个文件,那么如果该密码被泄露,那么所有 20 个连接也会被泄露。
我使用几个主机文件,个人、工作和杂项,如果密码泄露,那么问题不大