使用Plink远程执行sudo su -后会话冻结的问题求助
解决plink执行
sudo su -后会话冻结的问题 这个问题我之前踩过坑!核心原因是**sudo su -会启动一个交互式的root登录shell**,而plink默认是在非交互式会话里批量执行命令串——当交互式shell启动后,它会等着用户输入操作,但你没有交互环境,会话自然就卡住了,后面的touch test.me根本没机会被执行。
几种可行的解决方案:
直接用sudo执行单个/多个root命令(推荐)
不需要切换到root shell,直接给需要权限的命令加sudo前缀就行。如果要执行多个root命令,用sh -c把命令打包成整体,通过sudo一次性执行:./plink.exe -ssh -v -pw myPassHere myUser@myHost "hostname;ls -la;sudo sh -c 'touch test.me && mkdir /root/new_dir'"这种方式完全不会进入交互式shell,也就不会出现会话冻结的情况。
配置sudo免密(避免额外输入阻碍)
如果你的用户执行sudo时需要输入密码,即使上面的命令也可能卡住——因为plink没法自动输入sudo密码。这时候可以在Linux主机上用visudo命令编辑/etc/sudoers文件(用visudo能避免语法错误导致sudo失效),给你的用户添加免密权限:# 授权所有命令免密(方便但安全性稍低) myUser ALL=(ALL) NOPASSWD: ALL # 或者只授权需要用到的命令(更安全) myUser ALL=(ALL) NOPASSWD: /bin/touch, /bin/mkdir
为什么原来的命令会卡住?
当你执行sudo su -时,它会启动一个全新的root登录shell(-参数会加载root的环境变量和配置文件),这个shell是交互式的——它会等待用户在终端输入命令,但plink是把所有命令一次性发送到远程的非交互式会话里,当交互式shell启动后,整个会话就被这个shell占用了,后面的touch test.me根本没被传递到这个shell中,自然就一直卡在那等着用户输入了。
内容的提问来源于stack exchange,提问作者Stan K
相关产品推荐
相关产品推荐

