【问题标题】:SSH to Remote Server Bash ProgrammingSSH 到远程服务器 Bash 编程
【发布时间】:2016-07-30 15:52:02
【问题描述】:

我编写了一个脚本,它通过 SSH 连接到远程服务器并通过执行以下“nvidia-smi”来获取 GPU 服务器的状态,这只是脚本的描述和目的,但问题是我以“root”身份运行它可以 ssh 到另一台无密码的服务器但用户不能,我如何编写脚本让用户运行脚本并获取状态?当然不用输入远程服务器的密码,我可以使用任何身份验证吗?

这是脚本:

#!/bin/bash

HOSTS="gpuserver01\ngpuserver02"
SCRIPTS="nvidia-smi"

echo -e "which GPU server do you want to check?\n$HOSTS\n"-----------------""
echo "Please Enter Numebr of GPU Server"

read ans

#for HOSTNAME in $ans ; do

if [ $ans = '1' ]; then
HOSTNAME="gpuserver01"
ssh ${HOSTNAME} "${SCRIPTS}"
else

HOSTNAME="gpuserver02"
ssh ${HOSTNAME} "${SCRIPTS}"
fi

#done

谢谢。

【问题讨论】:

  • 注意:相等运算符只有一个=; bash 不幸地接受了==,但这会在其他 shell 上中断。不要传播== 不合规脚本疾病。谢谢。
  • 谢谢,注意,刚刚修复。

标签: linux bash ssh


【解决方案1】:

您可以授予其他用户以 root 权限运行您的脚本的权限。

运行visudo,在下面添加;

Cmnd_Alias      CUSTOM_CMD=/path/to/script/myscript.sh
myUser1         ALL = (root) NOPASSWD:CUSTOM_CMD 

如果其他用户有相同的组。假设otherUsers

Cmnd_Alias      CUSTOM_CMD=/path/to/script/myscript.sh
%otherUsers         ALL = (root) NOPASSWD:CUSTOM_CMD

【讨论】:

  • 我有一些后续问题。有什么方法可以隐藏脚本的内容,这样执行它的人就无法捕获它(chmod 711)吗?无论如何,脚本的用户可以使用它来 ssh 到远程服务器以获得控制台访问权限? OP 不希望用户根据他们对另一个答案的评论获得 ssh。 (而作为 root 的 ssh 可能会带来额外的破坏性)。
  • 是的,chmod 711 有效。如果您的脚本不包含任何漏洞,用户将无法获得任何访问权限。
【解决方案2】:
  1. 将普通用户添加到远程主机(例如 gpuuser01)。
  2. 为该用户创建 SSH 密钥。 [1] 然后查看,不用密码就可以登录gpuuser01了。
  3. 在远程主机(例如 gpuserver01)上使用 setuid 标志 [2] 创建新脚本,该脚本将运行 nvidia-smi。
  4. 现在您可以连接到远程主机并以 root 身份执行您的脚本,无需密码。
  5. 重写您的脚本(问题中的那个)。

[1]https://kb.iu.edu/d/aews

[2]http://www.cyberciti.biz/faq/unix-bsd-linux-setuid-file/

【讨论】:

  • 感谢您的回答。事情就是这样,用户登录到登录节点,我希望他们执行脚本以查看 GPU 服务器的状态,而不是让他们通过 SSH 连接到服务器,就像用户通过执行脚本向远程服务器发送某种代理来获取一些状态向上。
  • 您可以将脚本设置为登录shell。所以他们在登录帐户时不会看到 bash shell,而是看到您的应用程序的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多