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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:55