ssh远程连接
ssh root@192.168.189.132
退出远程连接
exit
传文件
scp -rp(r代表目录也拷贝,p代表权限)
scp -rp aa.txt root@192.168.189.132:/tmp/ 拷贝aa.txt到192.168.189.132下的/tmp目录
堡垒机前戏
开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作
SSHClient
用于连接远程服务器并执行基本命令
基于用户名密码连接:
import paramiko,sys #创建ssh对象 ssh = paramiko.SSHClient() #允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy) #连接服务器 ssh.connect(hostname='192.168.189.131',port=22,username='root',password="123456") #执行命令 stdin,stdout,stderr = ssh.exec_command('df') #获取命令结果 result = stdout.read() #打印命令 sys.stdout.write(result.decode()) ssh.close()
第二种基于用户名密码连接:
import paramiko if __name__ == '__main__': host_ip = '192.168.189.131' port = 22 username1 = 'root' password1 = '123456' transport = paramiko.Transport(host_ip, port) transport.connect(username=username1, password=password1) ssh = paramiko.SSHClient() ssh._transport = transport #ssh._transport指向transport stdin,stdout,stderr = ssh.exec_command("df") print(stdout.read().decode()) transport.close()
SFTPClient
用于连接远程服务器并执行上传下载
基于用户名密码上传下载
import paramiko,os,sys if __name__ == '__main__': host_ip = '192.168.189.131' port = 22 username1 = 'root' password1 = '123456' t = paramiko.Transport(host_ip, port) t.connect(username=username1, password=password1) sftp = paramiko.SFTPClient.from_transport(t) remotepath = r'/cc.txt' #这里一定要有文件名,不然会出现错误 localpath = os.path.join(os.getcwd(),'markdown.md') print(localpath) sftp.put(localpath, remotepath) #上传文件 sftp.get("/cc.txt",os.path.join(os.getcwd(),"aa.txt")) #下载文件 t.close()
通过ssh密钥来连接
RSA-非对称密钥验证
公钥 publick key
私钥 private key
192.168.189.131 --------> 192.168.189.132
私钥 公钥
生成公钥私钥命令:ssh-keygen ,在/root/.ssh下
拷贝192.168.189.131的公钥到你要登陆的账户下(注意换行)的~目录下.ssh/authorized_keys(更简单的拷贝方法ssh-copy-id root@192.168.189.132)
基于公钥密钥连接:
import paramiko,os,sys # with open(r"C:UsersMrs shao.sshid_rsa","r") as f: # print(f.read()) private_key = paramiko.RSAKey.from_private_key_file(r"C:UsersMrs shao.sshid_rsa") #私钥地址 #创建ssh对象 ssh = paramiko.SSHClient() #允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器 ssh.connect(hostname="192.168.189.131",port=22,username="root",pkey=private_key) #用pkey stdin,stdout,stderr = ssh.exec_command("df") result = stdout.read() print(result.decode()) ssh.close()
基于公钥密钥上传下载
import paramiko,os,sys private_key = paramiko.RSAKey.from_private_key_file(r"C:UsersMrs shao.sshid_rsa") #获取私钥并把公钥放到服务器 transport = paramiko.Transport("192.168.189.131",22) transport.connect(username="root",pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport) #将本地文件markdown.md上传至服务器的根目录下/from_window_file # sftp.put("markdown.md","/from_window_file") #将服务器文件/bb.txt下载到本地 sftp.get("/bb.txt","from_centos") transport.close()