![打开 tmux 会话,然后更改为不同的用户,无需输入密码提示](https://linux22.com/image/152213/%E6%89%93%E5%BC%80%20tmux%20%E4%BC%9A%E8%AF%9D%EF%BC%8C%E7%84%B6%E5%90%8E%E6%9B%B4%E6%94%B9%E4%B8%BA%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E6%88%B7%EF%BC%8C%E6%97%A0%E9%9C%80%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81%E6%8F%90%E7%A4%BA.png)
我正在尝试创建一个脚本来打开一个新的 tmux 会话,然后以不同的用户身份在该 tmux 会话中运行命令。
这样做的目的是为游戏服务器创建一个新的 tmux 会话,该会话分配有不同的 UNIX 用户。我听说为服务器提供自己的用户是一个很好的做法,但为了方便起见,我仍然希望在主用户的主目录中有一个脚本来启动服务器。我希望我的主用户可以使用 tmux 会话,但仍可以登录到游戏服务器用户。
主要问题是有一个我无法绕过的密码提示,要求我附加到 tmux 会话,输入密码,然后分离。这是我尝试过的:
#!/bin/sh
tmux new -d -s Minecraft sudo -u minecraft /home/minecraft/server/start.sh
我已经尝试了使用 sudo 运行脚本、添加su - Minecraft
到脚本以及 的每一种组合su Minecraft -c "script"
,并且在每一种组合中,它要么要求我附加到 tmux 会话并登录,要么就是不起作用,没有打开 tmux 会话。
我正在尝试找到一个解决方案,允许我在运行调用 tmux 的脚本时输入我的 sudo 密码或其他用户的密码,而不必通过附加然后分离来登录。
答案1
两种方法:
- 编辑
/etc/sudoers
以允许您的用户执行操作sudo -u minecraft
,或者明确地说sudo -u minecraft /home/minecraft/server/start.sh
,无需密码。 - 在命令之前执行
sudo -u minecraft sleep 0
脚本tmux
。这将询问您的密码。sudo
接下来几分钟的后续命令将不需要密码。
答案2
假设 ssh 正在您的计算机上运行,并侦听本地主机接口,您可以设置一个 ssh 密钥,并将该密钥的公共部分放入目标用户的.ssh/authorized_keys
文件中。
然后你可以:
ssh target_user@localhost 'whatever command you want to run'