SSH认证的过程是加密的,但认证成功后的通信是明文的。
认证过程:

A主机以公钥加密发送一段密文给B主机,B主机通过私钥将秘文解密后发送至A主机进行验证,成功后即认证成功。

步骤:

1:A主机执行命令ssh-keygen     #生成私钥和公钥
2:A主机执行命令ssh-copy-id root@B主机IP     #将私钥发送至B主机

通过密码登陆远程主机:

#!/bin/env python
#!coding=utf-8
import paramiko
import sys,os

#host = "192.168.137.101"   ##可以主动设定主机IP 
user='root'
password='westos'
#cmd= 'ls /mnt'             ##登陆主机后执行的命令
host=sys.argv[1]            ##将主机设为参数形式,类似于shell的$1
cmd=sys.argv[2]             ##将要执行的命令设为参数形式,类似与shell的$2

s=paramiko.SSHClient()      ##绑定实例
s.load_system_host_keys()   ##加载本机HOST主机文件
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())                         ##该句的作用是,解决第一次连接时‘yes’的问题

s.connect(host,22,user,password,timeout=5)  ##进行连接
stdin,stdout,stderr = s.exec_command(cmd)   ##执行‘cmd’的命令,将正确的结果赋给stdout,错误的输出赋给stderr

cmd_result = stdout.read(),stderr.read() ##将赋给的值做为结果

for line in cmd_result:
    print line
                            ##输出结果
s.close()

通过key(公钥,私钥)连接

#!/bin/env python
#!coding=utf-8
import paramiko
import sys,os
pkey_file='/root/.ssh/id_rsa'       ##设定私钥文件
key=paramiko.RSAKey.from_private_key_file(pkey_file)    ##绑定私钥
host=sys.argv[1]            ##设定要连接的主机IP
user='root'
cmd=sys.argv[2]             ##设定要执行的命令
s=paramiko.SSHClient()      ##绑定实例
s.load_system_host_keys()   ##加载本机的HOST文件
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())                         ##解决第一次登陆时‘YES’的问题

s.connect(host,22,user,pkey=key,timeout=5)  ##连接
stdin,stdout,stderr = s.exec_command(cmd)   

cmd_result = stdout.read(),stderr.read()

for line in cmd_result:
    print line

s.close()

实现ftp:

#!/bin/env python
#!coding=utf-8
import paramiko
import sys,os
pkey_file='/root/.ssh/id_rsa'
key=paramiko.RSAKey.from_private_key_file(pkey_file)
host=sys.argv[1]
user='root'

t=paramiko.Transport((host,22))     ##设定要连接的对象
t.connect(username=user,pkey=key)   ##设定登陆的用户
sftp=paramiko.SFTPClient.from_transport(t)  ##打开ftp

sftp.get('/mnt/haha','/mnt/ha')     ##下载对方主机/mnt/haha到本地主机/mnt/ha
sftp.put('1.py','/mnt/1.py')        ##上传本地文件1.py到对方主机/mnt/1.py
t.close()
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐