-1

我有一个方便的别名,如下所示:

sshpass -p "the_password" ssh -o StrictHostKeyChecking=no root@192.168.0.123

这将为我提供一种快速登录远程设备的方法,并获得一个包含选项卡完成的命令提示符。

但我总是做的第一件事是cd转到不同的目录。因此,我想将其作为命令添加到行尾,如下所示:

sshpass -p "the_password" ssh -o StrictHostKeyChecking=no root@192.168.0.123 'cd /tmp/Data/fx'

但是,如果我这样做,那么我根本不会得到提示!它只是坐在那里无所事事。接下来,我试图让它给我一个命令提示符,使用这个:

sshpass -p "the_password" ssh -o StrictHostKeyChecking=no root@192.168.0.123 'cd /tmp/Data/fx; /bin/bash -i'

这几乎行得通。

我已更改为正确的目录,并且有一个命令提示符。但是,我没有任何制表符补全,向上箭头也没有显示最新的命令。

我错过了什么?

4

1 回答 1

0
ssh -o [...] 'cd /tmp/Data/fx; /bin/bash -i'

当您要求 ssh 在远程系统上运行命令时,ssh 通常不会为远程会话分配 PTY(伪 TTY)。没有 TTY 会改变bash初始化自身的方式,因此不会启用其行编辑功能。您可以使用 -t 运行 ssh 以请求会话的 tty:

ssh -t -o [...] 'cd /tmp/Data/fx; /bin/bash -i'

如果您不想一直输入,可以将此行添加到本地主机上的“.ssh/config”文件中:

RequestTTY yes
于 2015-04-23T14:14:06.360 回答