我们现在有服务器A和服务器B,现在有一个需求,在服务器A上远程登录服务器B。
首先我们要在服务器A和服务器B上分别执行
ssh-keygen -t rsa
在~/.ssh文件夹下得到以下文件
authorized_keys # 存放其他服务器公钥的文件 id_rsa # 本服务器的私钥 id_rsa.pub # 本服务器公钥 known_hosts #
我们要把服务器A上的公钥放到authorized_keys文件里,并把这两台机器上的该文件权限设为755,否则会出现没权限的报错。其原因是,不能让所有者之外的用户对authorized_keys文件有写权限,否则,sshd将不允许使用该文件,因为它可能会被其他用户篡改。
这样paramiko就可以执行了
import json import paramiko import os host = '47.105.194.15' port = 22 username = "root" pkey = "/Users/gongsi/.ssh/id_rsa" # 本服务器的私钥文件路径[此文件服务器上~/.ssh/id_rsa可下载到本地] key = paramiko.RSAKey.from_private_key_file(pkey) # 创建并连接远程主机 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # ssh.load_system_host_keys() #如通过known_hosts 方式进行认证可以用这个,如果known_hosts 文件未定义还需要定义 known_hosts ssh.connect(host, port, username=username, pkey=key) paramiko.util.log_to_file('syslogin.log') # 将登录信息记录日志 # # # 远程执行shell脚本,获取输入输出流 stdin, stdout, stderr = ssh.exec_command('cd ~;ls') # print(json.dumps(stdout.readlines())) ssh.close()
这时候你用ssh登录发现还是需要输出密码,问题在于需要把服务器A上的私钥权限变成600。
然后你就可以这样登录了
ssh root@47.105.194.15
浙公网安备 33010602011771号