- 简介:
paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密
和认证的方式,进行远程服务器的连接。由于使用的是python这样的能够跨
平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, Mac
OS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个
平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。
- 使用:
功能:paramiko ssh链接用户密码
# 基于用户名密码连接 # sshClient import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', password='123') # 执行命令 , 加入;分好可执行两条命令(df;ifconfig) stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 result = stdout.read() # 关闭连接 ssh.close() # stdin 标准输入,返回输入的命令,你输入给它的。 # stdout 标准输出,命令执行结果 # stderr 标准错误,命令执行过程中如果出错,就打印。 # 注:命令只有一个,要么输出。要么错误。 # 注:可以使用三元运算,读取输出结果。 # 判断如果返回1就输出res,不成立就err。 # res,err = stdout.read(),stderr.read() # result = res if res else err # print(result.decode())
#注:Linux ssh链接另一个节点。 # Linux登陆:ssh root@x.x.x.x -p端口
功能:paramiko ssh文件发送
# 基于用户名密码上传下载 # sshClient import paramiko # 发送文件时使用Transport(IP,端口),建立链接通道 transport = paramiko.Transport(('hostname',22)) transport.connect(username='wupeiqi',password='123') # 将Transport作为链接,传给paramiko.SFTPClient.from_transport。 # 真正的传输协议实在SFTPClient内定义的。 sftp = paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path sftp.get('remove_path', 'local_path') # 关闭链接 transport.close()
#注:Linux下使用ssh发送文件。 # 发送文件:scp -rp -P端口 文件名 root@x.x.x.x:路径 # -rp,r代表目录,p代表权限。
- SSH RSA加密 :
ssh 秘钥
RSA 非对称秘钥验证
公钥 public key
私钥 private key
10.0.0.31 --> 10.0.0.41 #不用密码链接
私钥 公钥
说明:先生成一对秘钥,秘钥在登陆端,公钥转给被登陆端,
在次ssh时会匹配RSA秘钥则不需要输入密码。
功能:paramiko ssh私钥链接公钥
# 基于私钥链接,公钥 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='c1.salt.com', port=22, username='wupeiqi', pkey=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 result = stdout.read() # 关闭连接 ssh.close()
#1.连接端生成秘钥 #生成秘钥命令 [root@localhost]# ssh-keygen #秘钥存放路径 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #秘钥上在加一条密令 Enter passphrase (empty for no passphrase): #在次输入上条密令 Enter same passphrase again: #RSA 2048 秘钥格式,生成随机图片 +--[ RSA 2048]----+ #2.发送公钥 #使用ssh-copy-id命令发送公钥,加对应端口与IP,注意的是需要加双引号。 [root@localhost ~]# ssh-copy-id "-p22 root@192.168.1.158" 注:ssh公钥私钥说明。 #私钥存放目录,不可传给任何人。 Your identification has been saved in /root/.ssh/id_rsa. #公钥存放路径,传给要进行链接的节点。 Your public key has been saved in /root/.ssh/id_rsa.pub. #将公钥存放对方用户目录下,没文件说明没登陆过,需手动创建。 #权限设置为:chmod 600 存方目录:用户]#vim .ssh/authorized_keys #注:home/.ssh/known_hosts文件:首次登陆双方建立一个安全的签名认证,会 # 以加密的形式记录,再次登陆就不需要认证。