我无法找到描述此特定方案的问题.
我正在尝试执行一个非常基本的bash脚本来从多台机器上检索日志记录.我在本地运行脚本,但是需要通过ssh访问外部机器,以及在该机器上访问特权用户sudo …
ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
使用sh -x运行它会显示bash卡在’ssh’行上.所以我尝试修改它:
ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt
这似乎也无限期地停滞不前.这个问题有更好的解决方案吗?从我所知道的,我没有看到使用sudo su的方法……
谢谢你的帮助!
解决方法
我在当前环境中实现这一点的方法是使用-t标志运行ssh,强制tty分配,然后在其中运行sudo -u root,如下所示:
ssh -t hostname << EOF command1 sudo -u root command2 sudo -u otheruser "command3 | command4" sudo -u root /bin/bash -c "command5; command6; command7" command8 && ( sudo -u otheruser /bin/bash -c "cmd1 ${1}; cmd2 {$2}" ) || echo cmd2 did not work EOF
我的帐户位于远程端的sudoers中,因此无需密码.
此示例显示了在单个ssh会话中执行此操作的不同方法,包括使用bash或子shell运行多个命令.另请注意,如果将上述代码放入可执行脚本中,则可以将命令行参数($1和$2)传递给ssh,这些参数将被展开,然后在远程端引用.