我想知道是否有人可以帮助我完成我的脚本。
我有 2 台服务器。我们称它们为服务器 A 和服务器 B。服务器 B 上安装了一个软件,我想从服务器 A 运行它。我无法在服务器 A 上安装该软件。
我必须让用户在服务器 A 中运行另一个软件,然后该软件将调用脚本来调用服务器 B 中的软件来运行命令。
因此我在服务器 A 和服务器 B 上创建了一个名为 transfer 的用户。我允许 transfer 能够使用身份验证密钥通过 ssh 进入服务器 B,而无需输入密码。
因此现在我尝试从服务器 A 以 su 形式传输,通过 ssh 进入服务器 B 并运行命令。
以 root 身份运行完全没问题。但是,当我以自己或其他用户身份使用时,系统会要求我输入服务器 B 上“转移”用户的密码。
命令序列如下:
#!/bin/bash
su transfer -c 'ssh transfer@ServerB script $1 $2'
答案1
创建执行远程命令的 shell 脚本:
% cat > /home/transfer/exec-remote-sw <<EOF
#!/bin/bash
ssh transfer@ServerB script $1 $2
EOF
% chmod 755 /home/transfer/exec-remote-sw
以用户身份运行该脚本来测试transfer
:
% /home/transfer/exec-remote-sw arg1 arg2
现在以 root 身份创建一个 Linux 组(例如transfer
),然后将需要访问此功能的所有用户添加到 Unix 组中:
% groupadd transfer
% usermod -a -G transfer login1
% usermod -a -G transfer login2
...
% usermod -a -G transfer loginN
/etc/sudoers
以 root身份运行,将以下内容附加到文件中visudo
:
%transfer serverA = (transfer) NOPASSWD: /home/transfer/exec-remote-sw
通过以传输组中的用户身份登录并运行以下命令进行测试:
% sudo -u transfer /home/transfer/exec-remote-sw arg1 arg2
为了为您的用户简化这一操作,请让他们将以下内容添加到他们的 .profile 文件中(或将其添加到每个人的 /etc/profile 中):
alias svrbexec="sudo -u transfer /home/transfer/exec-remote-sw"
然后用户可以输入:
% svrbexec arg1 arg2
并且远程进程应该使用传递的两个参数来执行。