ssh 长连接

vim ~/.ssh/config 
Host xxx
HostName x.x.x.x
Port 22    
User root 
Protocol 2
ForwardAgent yes 
Compression yes 
ServerAliveCountMax 20
ServerAliveInterval 240
为了实现通过SSH长连接执行命令,可以使用脚本语言(如Python)结合SSH库来保持连接并发送多条指令。以下是一个基于Python的脚本模板,使用了`paramiko`库,它支持SSH协议并能保持长连接状态。 ### 使用`paramiko`实现SSH长连接执行命令的脚本模板 ```python import paramiko import time # 配置SSH连接参数 hostname = "192.168.1.20" port = 22 username = "root" password = "your_password" # 如果使用密钥认证,可以留空并配置密钥路径 # 创建SSH客户端 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 建立SSH连接 ssh.connect(hostname, port, username, password) # 保持连接并执行多条命令 try: # 打开一个新的会话通道 transport = ssh.get_transport() channel = transport.open_session() channel.setblocking(0) # 设置为非阻塞模式 channel.invoke_shell() # 发送第一条命令 channel.send("cd /home\n") time.sleep(1) # 等待命令执行 # 发送第二条命令 channel.send("pwd\n") time.sleep(1) # 接收输出结果 output = channel.recv(1024).decode("utf-8") print("命令输出:") print(output) finally: # 关闭连接 ssh.close() ``` ### 脚本说明 - **SSH连接参数**:需要根据实际环境配置目标主机的IP地址、端口、用户名和密码。 - **长连接机制**:通过`paramiko.SSHClient()`建立连接,并使用`invoke_shell()`创建交互式会话,支持多次命令发送。 - **非阻塞模式**:设置`setblocking(0)`以避免在接收数据时阻塞主线程。 - **命令执行**:使用`channel.send()`发送命令,`channel.recv()`接收响应数据。 - **安全性**:建议使用密钥认证代替密码认证以提高安全性。可以配置`pkey`参数加载私钥文件。 ### 安全性建议 - **密钥认证**:使用SSH密钥对进行身份验证,避免密码泄露风险。 - **加密通信**:确保SSH连接使用强加密算法,如AES-256[^1]。 - **会话超时**:在脚本中设置合理的超时机制,防止因网络问题导致连接长时间挂起。 ### 自动化扩展 如果需要执行更多命令或动态生成指令,可以将命令存储在一个列表中,并通过循环逐条发送: ```python commands = ["cd /home", "pwd", "ls -l"] for cmd in commands: channel.send(cmd + "\n") time.sleep(1) output = channel.recv(1024).decode("utf-8") print(f"输出:{output}") ``` ### 性能优化 - **批量处理**:如果命令之间没有依赖关系,可以尝试并行执行,使用多线程或多进程提高效率。 - **日志记录**:添加日志记录功能,便于调试和追踪执行结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值