如何用Python脚本自动输入SSH密码实现服务器自动登录?
解决SSH自动登录脚本的密码输入问题
方法1:SSH密钥登录(推荐,安全无密码)
这是最安全可靠的方案,彻底规避密码输入环节:
- 本地生成SSH密钥对:
全程回车使用默认配置,生成的私钥ssh-keygen -t rsaid_rsa和公钥id_rsa.pub会保存在~/.ssh目录下。 - 将公钥上传至目标服务器:
首次执行需手动输入一次密码,后续即可实现无密码登录。ssh-copy-id root@address - 脚本中用
subprocess调用SSH(比os.system更灵活可控):import subprocess subprocess.run(["ssh", "root@address"])
方法2:用sshpass传递密码(适合临时场景,注意安全风险)
如果必须使用密码登录,可借助sshpass工具自动填充密码,需先安装该工具(Ubuntu:sudo apt install sshpass;CentOS:yum install sshpass):
import subprocess password = "你的服务器密码" subprocess.run(["sshpass", "-p", password, "ssh", "root@address"])
⚠️ 注意:这种方式密码会明文暴露在进程列表中,存在安全隐患,不建议在生产环境使用。
方法3:用paramiko库(纯Python实现)
借助专门的SSH开发库paramiko,无需依赖外部工具,更适配Python脚本集成:
- 先安装库:
pip install paramiko - 基础登录与命令执行示例:
若需维持交互式会话,可使用import paramiko ssh = paramiko.SSHClient() # 自动添加未知主机密钥(生产环境建议手动配置known_hosts文件) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect("address", username="root", password="你的服务器密码") # 执行服务器命令并获取输出 stdin, stdout, stderr = ssh.exec_command("ls -l") print(stdout.read().decode()) # 关闭连接 ssh.close()invoke_shell()方法:shell = ssh.invoke_shell() shell.send("whoami\n") print(shell.recv(1024).decode())
内容的提问来源于stack exchange,提问作者Merlin Wolff
相关产品推荐
相关产品推荐

