这是我连接到服务器的python脚本。但是当我运行脚本时,它要求我键入我的ssh密码。我怎么能避免问我的ssh密码密钥?
host = '192.168.43.3'
user = 'root'
passwd = 'ppawd'
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=passwd)
transport = ssh.get_transport()
channel = transport.open_session()
channel.setblocking(1)
channel.settimeout(30)
command = "ls -a"
ssh.exec_command(command)
答案 0 :(得分:1)
我的建议是生成没有密码短语的密钥 - 只需在创建密钥时要求输入密码时按Enter键。
此密钥应专门用于您的脚本 - 避免重复使用您用于其他目的的密钥(例如用户的交互式登录),因为它会使密钥撤销和访问控制更加困难。
与在脚本中硬编码密码相比,无密码短语具有一些优势:
一些安全考虑事项:
请记住,有权访问该密钥的任何人都可以访问远程系统。您可以考虑对密钥文件设置限制性权限,并为脚本创建单独的用户以便在远程系统中登录(如果可能的话)。
如果您的脚本是单一目的,您还可以考虑限制远程系统上用户可用的shell命令列表
如果您在存储密钥的系统上没有物理安全性(例如:笔记本电脑或台式机位于不受信任的位置),您可能还需要使用全盘加密,阻止设备加密(LUKS)或文件级加密(encfs)。
答案 1 :(得分:1)
您可以将指纹添加到每个服务器的known_hosts。对于单个用户:
cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
将您的连接主机IP添加到known_hosts然后它不会要求任何问题,例如 您确定要继续连接(是/否)吗? 或者如果你想要禁用密码,请检查此链接 http://www.linuxproblem.org/art_9.html https://www.debian.org/devel/passwordlessssh
答案 2 :(得分:1)
答案 3 :(得分:0)
我遇到了同样的问题。我认为这里的其他答案没有意识到问题的实质。这是一个古老的问题,但是我想帮助像谷歌搜索后来到这里的其他人。
您需要禁用ssh代理功能allow_agent = False,然后它将不再提示您输入密码。 Paramiko尝试连接到ssh代理,我假设尝试读取密钥。我还添加了look_for_keys = False,因为它将禁用检查要使用的私钥。
示例:
client.connect(server, port=port, username=username, password=password, look_for_keys=False, allow_agent=False)