*获取更多资料请到本人首页(https://blog.youkuaiyun.com/qq_40576301)*
1 ssh介绍
ssh是远程连接工具,文件上传下载,远程控制。
ssh可以作为文件服务器,版本控制服务器的核心技术点。也是跳板机和堡垒机的核心知识点
2 ssh配置
2.1 两台可以ping通的计算机
首先准备两台可以ping通的主机
2.2 关闭防火墙服务
systemctl stop firewalld 关闭
systemctl start firewalld 开启
systemctl restart firewalld 重启
2.3 关闭Linux的安全模式
Setenforce 0
2.4 ssh 连接
ssh 用户名@ip地址
2.5 .ssh文件夹
Known_hosts文件是ssh的白名单,记录着可以安全登陆的所有服务器,第一次登陆一台服务器,known_hosts文件没有该服务器记录,就会询问是否登陆。第二次登陆不需要询问
3 私钥登陆
(1)生成私钥和公钥
ssh-keygen –t –rsa
执行完成在.ssh文件夹生成两个文件id_rsa(私钥)、id_rsa_pub(公钥)
(2)传递公钥
修改公钥文件的名字 cp id_rsa_pub authorized_keys
复制公钥到要登陆的服务器上,将本地路径下的文件复制远程服务器上
Scp 本地路径(源路径) 远程用户名@远程用户ip:远程用户路径(目的路径)
(3)实现登录
ssh –i id_rsa root@ip
4 Scp常用的命令
(本地 >> 远端) scp /root/.ssh/authorized_keys root@10.10.21.30: /root/.ssh/authorized_keys
(远端 >> 远端) scp root@10.10.21.30:/root/.ssh/authorized_keys /root/.ssh/authorized_keys1
(本地 >> 远端) scp -r /root/.ssh root@10.10.21.30:/root/.ssh 复制目录
(远端 >> 本地) scp -r root@10.10.21.30:/root/.ssh /root/.ssh 复制目录
5 基于python的ssh操作
Paramiko 是python三方的ssh模块,通过socket实现了ssh的功能。
Pip install paramiko
假设三台主机ip分别为:
Windows : 10.10.21.169
Tanyxn: 10.10.21.44
Laobian_client: 10.10.21.30
代码如下:
import paramiko
#创建一个ssh的客户端
ssh = paramiko.SSHClient()
#创建一个ssh的白名单
know_host = paramiko.AutoAddPolicy()
#加载创建的白名单
ssh.set_missing_host_key_policy(know_host)
#连接服务器
ssh.connect(
hostname = "10.10.21.30",
port = 22,
username = "root",
password = "12345"
)
#执行命令
stdin,stdout,stderr = ssh.exec_command("rm -rf /root/Desktop/av")
#stdin 标准格式的输入,是一个写权限的文件对象
#stdout 标准格式的输出,是一个读权限的文件对象
#stderr 标准格式的错误,是一个读权限的文件对象
print(stdout.read().decode()) #读出执行的结果
ssh.close() #关闭连接
import paramiko
import threading
class ParamikoThreading(threading.Thread):
def __init__(self,command,host,username,password,port=22):
self.host = host
self.username = username
self.password = password
self.port = port
self.command = command
super(ParamikoThreading,self).__init__()
def run(self):
ssh = paramiko.SSHClient()
know_host = paramiko.AutoAddPolicy()
ssh.set_missing_host_key_policy(know_host)
ssh.connect(
hostname = self.host,
port = self.port,
username = self.username,
password = self.password
)
#执行命令
stdin,stdout,stderr = ssh.exec_command(self.command)
#stdin 标准格式的输入,是一个写权限的文件对象
#stdout 标准格式的输出,是一个读权限的文件对象
#stderr 标准格式的错误,是一个读权限的文件对象
print("+++++++++++++++++++++++++++++++++++++++++++++++++")
print("ip:%s\ncommand:%s\nresult:\n"%(self.host,self.command))
print("-------------------------------------------------")
print(stdout.read().decode()) #读出执行的结果
print("+++++++++++++++++++++++++++++++++++++++++++++++++")
ssh.close() #关闭连接
if __name__ == "__main__":
from time import sleep
from settings import pool
command = "ls"
t_pool = []
for host in pool:
t = ParamikoThreading(
host = host.get("host","localhost"),
username = host.get("username","root"),
password = host.get("password","123"),
command=command)
t_pool.append(t)
for t in t_pool:
t.start()
for t in t_pool:
t.join()
import paramiko
#创建一个ssh的客户端
ssh = paramiko.SSHClient()
#创建一个ssh的白名单
know_host = paramiko.AutoAddPolicy()
#加载创建的白名单
ssh.set_missing_host_key_policy(know_host)
#连接服务器
ssh.connect(
hostname = "10.10.21.30",
port = 22,
username = "root",
password = "12345"
)
shell = ssh.invoke_shell()
shell.settimeout(1)
command = input(">>>")+"\n"
shell.send(command)
while True:
try:
recv = shell.recv(512).decode()
if recv:
print(recv)
else:
continue
except:
command = input(">>>") + "\n"
shell.send(command)
ssh.close() #关闭连接
import paramiko
trans = paramiko.Transport(
sock=("10.10.21.44",22)
)
trans.connect(
username = "root",
password = "12345"
)
sftp = paramiko.SFTPClient.from_transport(trans)
#put 上传
sftp.put("settings.py","/root/Desktop/settings.py")
#get 下载
#sftp.get("/root/Desktop/package.txt","package.txt")
sftp.close()
使用socket实现paramiko的文件上传和下载
*获取更多资料请到本人首页(https://blog.youkuaiyun.com/qq_40576301)*