1

我想在使用 SSH 登录远程 linux 服务器时自动输入密码。

我制作了一个可执行的bash脚本

#! /bin/bash

ssh user@machine.remote.host

但是有没有办法让我的密码输入自动化?

4

5 回答 5

8
ssh-keygen # generate a pair of RSA keys
scp ~/.ssh/id_rsa.pub user@machine.remote.host:id_rsa.tmp # copy the public key to remote host
ssh user@machine.remote.host # ssh to remote server, this time it requires password
cat id_rsa.tmp >> .ssh/authorized_keys # add the public key to authorized_keys

然后,您可以注销并在没有密码的情况下登录。

于 2013-10-30T01:09:57.447 回答
4

除非您正在谈论跳过密码输入(通过 SSH 密钥),否则expect将自动进行交互:

set pass "MYPASSWORD"
spawn ssh ME@MYHOST
expect -re "assword: *$";
send -- "$pass\r"
expect -re "\$ *$";
interact
于 2013-10-30T01:13:44.767 回答
1

sshpass在 Debian / Ubuntu Linux 下安装

键入以下命令: $ sudo apt-get install sshpass

如何使用 sshpass?

server.example.com使用密码登录到调用的 ssh 服务器t@uyM59bQ

$ sshpass -p 't@uyM59bQ' ssh username@server.example.com

在 shell 脚本下,您可能需要禁用主机密钥检查:

$ sshpass -p 't@uyM59bQ' ssh -o StrictHostKeyChecking=no username@server.example.com

如何使用 rsync 备份 /var/www/html?

使用密码验证通过 SSH 运行 rsync,在命令行上传递密码:

$ rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/

于 2013-10-30T01:10:12.143 回答
0

我对此进行了广泛的研究,这就是我决定学习python的原因。最简洁的答案是不”。标准 bash 无法将密码传递给 ssh 提示符。您可以安装一些东西,例如 expect 或 sshpass,它们可以为您提供此功能,但使用这些取决于您在运行脚本的服务器上是否有自由漫游。如果您曾经想学习 python,这是一个很好的学习方法。有一个名为“Fabric”的python模块,它内置了这个功能,并且易于使用。

抱歉,这不是一个真正的答案,只是想我会传递我的建议,因为我一直在你所在的地方......

于 2013-10-30T03:16:55.540 回答
0

对于想要自动化人机交互的任何情况,Expect 都是首选工具。

检查一下...它很容易学习(至少对于像您需要处理的简单任务这样的简单任务),并且发现它已经安装在许多服务器中的情况并不少见。

只是想我会传达我对此的看法......祝你好运!

于 2013-10-30T05:09:42.510 回答