- 简单的SSHClient客户端实现
# Author : Xuefeng
import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许链接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname="localhost", port=6969, username="Jim", password="123")
print("connected")
# 执行命令
stdin, stdout, stderr = ssh.exec_command("df")
# 获取命令结果
result = stdout.read()
# result1 = stderr.read()
# 关闭连接
ssh.close()
- SSHsft实现
# Author : Xuefeng
import paramiko
transport = paramiko.Transport(("hostname", 22))
transport.connect(username="Jim", password="123")
sftp = paramiko.SFTPClient.from_transport(transport)
# 将local.py 上传至服务器 /tmp/test.py
sftp.put("/tmp/local.py", "/tmp/test.py")
# 将remove_path 下载到本地 local_path
sftp.get("remove_path", "local_path")
transport.close()
- SSHRAS通过密钥进行访问执行命令
# Author : Xuefeng
import paramiko
private_key = paramiko.RSAKey.from_private_key_file("/home/auto/.ssh/id_rsa")
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许链接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname="cl.salt.com", port=22, username="Jim", pkey=private_key)
# 执行命令
std_in, std_out, std_err = ssh.exec_command("df")
# 获取命令结果
result = std_out.read()
print(result)
ssh.close()
-
总结
ssh 密钥RSA 非对称密钥验证
私钥 private key
10.0.0.31 -----> 10.0.0.41
私钥 公钥
生成密钥对:ssh-keygen直接将公钥复制给其他用户: ssh-copy-id "-p52113 root@10.0.0.31" 间接复制公钥到制定用户的指定文件夹: 公钥必须是一整行进行复制