1.课前准备:
本次学习堡垒机相关知识;之前,需要安装Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作。
前提:
python3.5程序安装到默认路径下并已添加path(如非默认,可根据报错信息自行百度)
步骤:
1:管理员方式打开cmd,切换到python安装路径的Scripts目录下:
2:执行命令:
pip3.5.exe install paramiko
3.安装过程中可能会报错:
执行以下命令更新下pip,然后继续第一步安装就哦了
pip install --upgrade pip
4:验证安装是否成功:打开cmd,进入python模式,输入import paramiko;无报错则代表成功;
2.热身:
SSH客户端:
1)基于用户名密码连接:
import paramiko #导入paramiko模块 #创建SSH对象 ssh = paramiko.SSHClient() #允许链接不在know_hosts文件的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器 ssh.connect(hostname='192.168.1.1',port=22,username='cc',password='123123') #执行命令 stdin,stdout,stderr = ssh.exec_command('df') #获取命令结果 result = stdout.read() #关闭连接 ssh.close()
2)基于公钥密钥连接:
准备工作:
1.linux下生成公钥密钥
该命令将在/root/.ssh目录下面产生一对密钥id_rsa和公钥id_rsa.pub。(若没有安装ssh,则需要执行yum install openssh-clients)
id_rsa.pub 公钥 ---改名为authorized_keys
ssh-keygen#执行后一路enter即可
2.将密钥copy到win下
代码:
import paramiko private_key = paramiko.RSAKey.from_private_key_file('id_rsa') # 这里写密钥在win下的文件路径 # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='192.168.1.15', port=22, username='root', pkey=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 result = stdout.read() #打印命令结果 print(result.decode()) # 关闭连接 ssh.close()
STFP客户端:
用于连接远程服务器并执行上传下载
1)基于用户名密码上传下载:
import paramiko transport = paramiko.Transport(('hostname',22)) transport.connect(username='cc',password='123123') 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()
2)基于公钥密钥下载:
前提步骤同上
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa') transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', pkey=private_key ) 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()