你能在.ssh/config中设置密码以允许自动登录吗?

我使用Ubuntu 11.10。我每天使用ssh连接许多服务器,所以我把它们的参数放在.ssh/config文件中,像这样。

Host Home
User netmoon
Port 22
HostName test.com

有没有办法把每个连接的密码放在这个文件里,这样,当服务器要求输入密码时,终端就会输入其密码并发送给服务器?

我需要这样做,因为有时我站在远离电脑的地方,当我回去时,输入密码并按下Enter,终端就会说`连接关闭'。

P.S. 我不想使用公钥/私钥对。

如果你不是真的想使用公钥/私钥对,你可以写一个`期望'脚本,根据目标地址自动为你输入密码。

编辑:我的意思是,你可以有一个脚本,一方面使用expect为你输入密码,另一方面从配置文件中读取特定用户和主机的密码。例如,下面的python脚本将适用于晴天的情况。

#!/usr/bin/python                                                                                                                        
import argparse
from ConfigParser import ConfigParser
import pexpect

def main(args):
    url = args.url
    user, host = url.split('@', 1)

    cfg_file = 'ssh.cfg'
    cfg = ConfigParser()
    cfg.read(cfg_file)
    passwd = cfg.get(user, host)

    child = pexpect.spawn('ssh {0}'.format(url))
    child.expect('password:')
    child.sendline(passwd)
    child.interact()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Run ssh through pexpect')
    parser.add_argument('url')
    args = parser.parse_args()
    main(args)

而配置文件的格式将如下。

[user_1]
host1 = passwd_1
host2 = passwd_2

[user_2]
host1 = passwd_1
host2 = passwd_2

注意:正如所解释的,为了处理所有可能的错误和来自ssh的问题信息以及所有可能的URL,python脚本需要复杂得多(在这个例子中,假定它将是类似user@host的东西,但用户部分在大多数情况下是不用的),但基本思路仍然是一样的。关于配置文件,你可以使用一个不同的配置文件,或者使用.ssh/config并编写你自己的代码来解析该文件并获得指定用户和主机的密码。

评论(4)

不,这恐怕是不可能的,我不知道。

唯一真正的选择是使用私钥,但你已经说过你不想这样做(为什么不呢)。

评论(6)

@BrunoPereira对[这个问题]的回答(https://askubuntu.com/questions/46930/how-can-i-set-up-password-less-ssh-login)显示了另一种无需明确输入密码和避免使用ssh密钥的连接方法

你可以在你的~/.bashrc中创建一个脚本、一个别名或一个函数来快速执行该命令。

显然,这种方法有一些安全方面的考虑,你应该考虑到。

评论(1)