linux
ssh操作
ssh远程连接服务,ssh服务的名字sshd,centos自带ssh服务
默认端口是22
准备两台设备:
使用克隆:
ifconfig 查看ip地址
server:10.10.107.243
client:10.10.107.84
保证两台设备可以相互连通:
测试是否可以连通:
server ping client
ping 10.10.107.84
client ping server
关闭防火墙
查看防火墙状态:
关闭防火墙:
客户端和服务端都要关闭
关闭安全模式:
通过ssh连接对方电脑
通过client 连接 server
ssh server的用户名@serverIP地址
第一连接会做认证,认证通过下次在连接就不需要认证了
使用我自己的client---->server---->你的server
退出登录 exit
xshell使用:
xshell 使用的是ssh服务 和上面的原理一样 要将服务端的防火墙和安全模式关闭
单击文件选择新建
密钥登录不需要密码:
公钥 放到服务器端
私钥 放到本机
- 在客户端生成公钥和私钥
ssh-keygen -t rsa
公钥和私钥的地址 还有白名单文件
2. 将公钥改名字
authorized_keys
3. 将公钥上传到服务端
scp /root/.shh/authorized_keys root@10.10.107.84:/root/.ssh/authorized_keys
如果服务端的/root 下没有.ssh目录需要手动创建
4. 在本本地使用私钥登录链接远程服务器
ssh -i id_rsa root@10.10.107.84
上传文件
scp 要上传的文件 对方的用户@对方的地址:上传的位置
下载文件
scp 对方用户@对方的地址:要下载的文件路径 下载的路径
如果要传目录
scp -r
python中的paramiko:
第三方包 基于ssh服务 可以使用python实现ssh功能
使用前先安装
pip install paramiko
使用python连接linux服务器并执行linux命令
import paramiko
#1.创建一个客户端
ssh=paramiko.SSHClient()#最为基本的类是“paramiko.SSHClient". 它提供了与服务器连接和文件传输的最基本的接口
#2.创建一个白名单
know_host=paramiko.AutoAddPolicy()##目的是接受不在本地Known_host文件下的主机。
# 设置host key的规则调用的方法叫ssh client 实例的"set_missing_host_key_policy()",它设定了你所期望的方法来管理host key.
#3.设置不提醒
ssh.set_missing_host_key_policy(know_host)
#4.连接服务器
ssh.connect(hostname='10.10.x.y',port=22,username='root',password='a')
#5.执行linux 命令
# stdin,stdout,stderr=ssh.exec_command('mkdir /home/zh/Desktop/g')
stdin,stdout,stderr =ssh.exec_command('ls')
# stdin,stdout,stderr =ssh.exec_command('touch /home/zh/Desktop/paramikos.py')
'''
stdin 标准输入 文件对象 写权限
stdout 标准的输出 文件对象 读权限
stderr 特殊的输出 文件独享 读权限 标准错误输出文件
'''
#6.查看输出结果
print(stdout.read().decode())
#7.关闭连接
ssh.close()
加入多线程
import threading
import paramiko
class MyThread(threading.Thread):
def __init__(self,host,user,pwd,port=22):
self.host=host
self.user=user
self.pwd=pwd
self.port=port
super(MyThread,self).__init__()
def run(self):
#创建客户端
ssh=paramiko.SSHClient()
#设置白名单不提醒
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
#连接
ssh.connect(hostname=self.host,port=self.port,
username=self.user,password=self.pwd)
#执行命令
stdin,stdout,stderr=ssh.exec_command('mkdir /opt/love')
print(stdout.read().decode)
#关闭连接
ssh.close()
if __name__ == '__main__':
data=[
{'host':'10.10.x.y','user':'root','password':'a'},
{'host':'10.10.x.y1','user':'root','password':'b'},
{'host':'10.10.x.y2','user':'root','password':'c'}
]
tlist=[]
for i in data:
t=MyThread(host=i['host'],user=i['user'],pwd=i['password'])
tlist.append(t)
# print(tlist)[<MyThread(Thread-1, initial)>, <MyThread(Thread-2, initial)>, <MyThread(Thread-3, initial)>]
for i in tlist:
i.start()
实现xshell的功能
import paramiko
# 创建客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接
ssh.connect(hostname='10.10.a.b',port=22,username='root',password='x')
# 创建一个shell
shell = ssh.invoke_shell()
shell.settimeout(1)
# 获取命令
command = input('>>') + '\n'
# 发送命令
shell.send(command)
i=1
while True:
if command == 'q' + '\n':
break
try:
# 获取返回的结果
recv = shell.recv(512).decode()
if recv:
print(i)
i += 1
print(recv)
else:
continue
except:
command = input('>>') + '\n'
# 发送命令
shell.send(command)
ssh.close()
#接受消息的是服务端 recv先运行recv
#发送消息的是客户端
# 先运行服务端,在运行客户端
实现文件上传下载的功能
import paramiko
trans = paramiko.Transport(sock=('10.10.a.b'))
trans.connect(username='root',password='x')
sftp = paramiko.SFTPClient.from_transport(trans)
#上传
# put('你要上传的文件','上传的位置')
# sftp.put('jiandandian','/opt/newjdd')
#下载
# get('你要下载的文件','下载的位置')
sftp.get('/opt/newjdd','love')
sftp.close()