通过 ssh 登录,执行一个命令,但我不想退出 bash

通过 ssh 登录,执行一个命令,但我不想退出 bash

我想在 ssh 另一个 centos 时更改 PS1

    strshell = 'PS1="remote!"'
    os.system("ssh -i %s -l%s -p%s %s %s"%(SSH_KEY,SSH_USER,SSH_PORT,des,strshell))  

ssh自动退出。我想留在这个壳里。如何实现。

我只是改变另一种方式来做到这一点

 tin = ' sudo -i ; export PS1="Remote! \W :"; exec /bin/bash -i'
 os.system("ssh  -i%s -l%s -p%s %s -t%s" % (SSH_KEY, SSH_USER, SSH_PORT, des, tin))  

但我更改了本地计算机提示符而不是远程计算机提示符。为什么?
os.system是一个python函数

答案1

sudo -i作为目标用户运行登录 shell。其余部分export PS1...只会在该 shell 终止后执行。

另外,您~/.bashrc可能会覆盖 PS1 以将其传递到环境中,这可能不会有帮助。

你可以尝试:

ssh -t host 'sudo env PROMPT_COMMAND="PS1=\"Remote! \W: \"
             unset PROMPT_COMMAND" bash -l'

(假设目标用户~/.bashrc未设置$PROMPT_COMMAND)。

答案2

这似乎有效:

ssh -t localhost "echo '. /dev/fd/2'|sudo bash -sil 2<<\FILE        
PS1='my prompt : '
exec 2>/dev/tty
exec </dev/tty
FILE
"
[sudo] password for mikeserv: 
my prompt : id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
my prompt : 

sudo默认情况下将关闭除 0,1,2 之外的所有文件描述符,并且它需要<&0在终端上输入密码,但您通常可以通过劫持来偷偷溜过去stderr。无论如何,它并没有永远消失 - 实际上我上面做的第一件事就是将其重新连接到ssh的终端。更现实的是,您将拥有一些实际的脚本,您将通过它们,就像$(cat file)我的$PS1定义和其余部分一样。不过,这是很多烦人的间接说法;我认为最好在远程配置文件中根据需要处理这些内容。

相关内容