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:\Users\Mrs shao\.ssh\id_rsa","r") as f:
# print(f.read())
private_key = paramiko.RSAKey.from_private_key_file(r"C:\Users\Mrs shao\.ssh\id_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:\Users\Mrs shao\.ssh\id_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()