You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Paramiko中实现ssh -t bash的等效功能?

在Paramiko中指定启动bash shell解决专有shell无法执行命令的问题

你可以通过两种方式实现终端ssh username@device.com -t bash的效果,强制远程端启动bash shell而非专有shell:

方法一:使用exec_command执行bash并请求伪终端

这种方式适合执行单条或批量命令,通过get_pty=True模拟终端的-t参数,直接启动bash:

ssh_transfer = paramiko.SSHClient()
ssh_transfer.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh_transfer.connect(hostname=device, port=22, username=username, key_filename=private_key_name)

# 启动bash并分配伪终端
stdin, stdout, stderr = ssh_transfer.exec_command('bash', get_pty=True)

# 示例:发送命令并读取输出
stdin.write('ls -l\n')
stdin.flush()

# 获取命令执行结果
print("标准输出:\n", stdout.read().decode())
print("错误输出:\n", stderr.read().decode())

ssh_transfer.close()

方法二:创建交互式shell后切换到bash

如果需要持续的交互式会话,可以先创建shell再发送bash命令切换:

ssh_transfer = paramiko.SSHClient()
ssh_transfer.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh_transfer.connect(hostname=device, port=22, username=username, key_filename=private_key_name)

# 初始化交互式shell
shell = ssh_transfer.invoke_shell()

# 发送bash命令切换shell
shell.send('bash\n')

# 等待切换完成(根据网络情况调整延时)
import time
time.sleep(1)

# 示例:执行命令并读取输出
shell.send('pwd\n')
time.sleep(1)
output = shell.recv(65535).decode()
print(output)

ssh_transfer.close()

核心逻辑是模拟终端-t bash的行为:通过get_pty=True(方法一)或交互式shell(方法二)分配伪终端,同时明确指定启动bash替代默认的专有shell。

内容的提问来源于stack exchange,提问作者rogueakula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:48:14