ssh配置受限远程访问的步骤

ssh配置受限远程访问的步骤

我正在寻找正确设置我的 sudoers 文件,但我找到的文档似乎没有帮助。

我有一个用户,例如用户1

我有两台 Debian 服务器,服务器1服务器2

目前,我可以使用 SSH 从我的 Windows PC 连接到任一服务器,并在需要时执行sudo以提升我的权限。

我现在需要能够从服务器1服务器2在 shell 脚本中,并执行文件服务器2as sudo,无需输入密码(在脚本中或手动输入)。

我知道我可以使用该sudoers文件来执行此操作。

但我该怎么做呢?

在我的sudoers文件中(在服务器2)我有:

# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo  ALL=(ALL:ALL) ALL
%user1 ALL=(ALL:ALL) ALL

我知道我可以做类似的事情:

%user1 ALL = NOPASSWD: /path/to/myscript    

这将允许用户1运行脚本/路径/到/mysqcript无需输入密码。但是,当我从 Windows PC 连接时,除了运行脚本之外,这会阻止我执行其他任何操作吗?

理想情况下,我想将此NOPASSWD功能限制为来自的连接服务器1

我在这里错过了什么吗?我不愿意“测试”这些变化,以免我把自己完全锁在外面。

答案1

在得到真正的答案之前需要调整一件事。使用“%user1”意味着“人在团体user1”;您可能只想让“user1”表示 user1。

其次,sudo 不知道你在哪里登录-- 仅在您当前运行 sudo 的地方。

第三,确保您使用“visudo”进行更改;它会尽力防止您犯语法错误。

第四,添加 sudoers 行只会增加您当前的访问权限;它不会阻止您运行其他脚本;如果这些脚本需要 sudo,那么您将需要更多 sudoers 条目。

答案2

您询问有关将功能限制为来自 的连接server1。我会用 来做到这一点ssh。修改用户的代码适用于Debian/Ubuntu。这些原则和大多数其他代码应该是相当通用的。进行此配置后,要在server2from上执行脚本server1,您将发出以下命令:

$ ssh -i ~/.ssh/script_identity.pub ruser@server2

上述命令将连接server2并运行您的脚本,无需进一步干预sshsudo身份验证。公钥文件ssh是在 上远程运行脚本的唯一访问权限server2,从而使您能够决定哪些计算机和/或帐户可以通过 访问脚本ssh

下面的描述举例说明了完成这些任务的代码。

此配置需要 上的专用帐户server2。有很多充分的理由,其中之一您已经提到过,您可能会被锁定server2,或者更糟糕的是,无意中修改了工作帐户中的错误文件。

ssh配置受限远程访问的步骤

server1

  1. 从将执行脚本的帐户中server1,创建一个新的 ssh 密钥,该密钥仅用于执行远程脚本。
  2. 修改新的 ssh 公钥以限制仅执行一个命令(请参阅command=联机sshd帮助页)。
  3. 制作一个打印用户 ID 和日期的测试脚本。

server2(所有操作都将在 远程完成server1

  1. 在 上创建一个新帐户server2
  2. 将修改后的公共身份文件复制到.ssh/authorized_keys新用户的主目录中server2
  3. 将测试脚本复制到 上的新用户主目录server2
  4. 检查新用户帐户中所有文件的所有权限和所有权。

代码

将以下脚本保存为ruser.shon 后server1,并且在了解它将执行的操作后,发出以下命令来执行:

$ sh ./ruser.sh ruser server2

将此脚本保存ruser.sh在您的用户帐户中system1

#!/bin/sh -e

#
# ruser.sh -- setup user on remote host for secure remote script execution
#
# This is for first time setup!
# Always use a new user on remote host.
#

USAGE="ERROR: Usage: sh $0 remote-username remote-hostname"    
RUSER="${1:?$USAGE}"
RHOST="${2:?$USAGE}"
UNIQUE=$$

# build files that will be transferred to the remote host

# Make the new ssh key, and modify the public key so that
# it can only be used to execute "./rscript.sh"

ssh-keygen -N '' -f ~/.ssh/script_identity
sed -i '1 {
    s,command="./rscript.sh",,
    s,^,command="./rscript.sh" ,
}' ~/.ssh/script_identity.pub

# rscript.sh -- the only script that can be executed
# with the modified public key.

printf '%s' '(id;date) > rscript.out' > /tmp/rscript.sh.$$

# copy the new identity public key and rscript.sh to the remote host

scp ~/.ssh/script_identity.pub "${RHOST}":/tmp/script_identity.pub.${UNIQUE}
scp /tmp/rscript.${UNIQUE} "${RHOST}":/tmp/script_identity.pub.${UNIQUE}

# setup remote user for script execution
# Create new user
# Move identity file and script to new user's home directory.
# Fix ownership and permissions

ssh -t ${RHOST} "sudo /bin/sh -cex '
        adduser --system --shell=/bin/sh ${RUSER};
        mkdir -m0700 ~${RUSER}/.ssh;

        mv /tmp/script_identity.pub.${UNIQUE} ~${RUSER}/.ssh/authorized_keys;
        mv /tmp/rscript.sh.${UNIQUE} ~${RUSER}/rscript.sh

        chmod -R 0600 ~${RUSER}/.ssh/;
        chmod    0700 ~${RUSER}/.ssh/;
        chmod 0700 ~${RUSER}/rscript.sh;
        chown -R ${RUSER}:nogroup ~${RUSER}/;
    '
"

# remove temp files

rm -rf /tmp/rscript.sh.${UNIQUE}

通过执行以下命令来测试上述配置server1

$ ssh -i ~/.ssh/script_identity.pub ruser@server2

ruser然后检查on的主目录,server2发现文件rscript.out确实创建了,说明一切配置正确。

如果是这样,请修改ruser@server2:rscript.sh以调用您的/path/to/myscript.在修改 sudoers 文件之前,请再次发出 ssh 命令以再次运行远程脚本,以确保您的输出和错误输出按您想要的方式工作。

现在配置server2sudoers 文件以允许该新用户server2以 root 身份仅执行一个脚本而无需密码。

ruser ALL = NOPASSWD: /path/to/myscript

恭喜,您现在可以安全地远程运行特权脚本,无需密码sshsudo系统密码。

相关内容