SSH服务流程详解加示例(另附上基于Python的ssh服务代码)

本文详细介绍了SSH服务的配置过程,包括两台主机的ping通、关闭防火墙、禁用安全模式、SSH连接以及私钥登录的步骤。此外,还探讨了SCP命令的使用,并提供了基于Python的SSH操作示例,利用Paramiko模块实现远程控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*获取更多资料请到本人首页(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)*

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值