使用 shell 脚本修改 /etc/hosts 文件

Posted

技术标签:

【中文标题】使用 shell 脚本修改 /etc/hosts 文件【英文标题】:Modify /etc/hosts file using a shell script 【发布时间】:2017-04-17 19:56:50 【问题描述】:

我没有在我的两台服务器 a 和 b 之间启用无密码 ssh。所以我使用 sshpass 从 a 连接到服务器 b。

我需要在服务器 b 的 /etc/hosts 中添加主机条目。但是我登录到服务器 b 的用户是非 root 用户,但具有编辑 root 拥有的文件的 sudo 权限。

如何在使用 sshpass 时通过 shell 脚本将主机条目从服务器 a 添加到服务器 b 的 /etc/hosts。

这是尝试过的脚本:

#!/bin/bash

export SSHPASS="password"
SSHUSER=ciuser
WPC_IP=10.8.150.28

sshpass -e ssh -o UserKnownHostsFile=/dev/null -o 'StrictHostKeyChecking no' $SSHUSER@$WPC_IP "echo test >> /etc/hosts"

输出:

bash test.sh
Warning: Permanently added '10.8.150.28' (RSA) to the list of known hosts.
bash: /etc/hosts: Permission denied

谢谢。

【问题讨论】:

你能发布你尝试过的命令以及它是如何失败的吗? @thatotherguy:更新了问题。谢谢 【参考方案1】:

sudo doesn't work with redirects 直接,所以你可以使用sudo tee -a 附加到文件:

echo '1.2.3.4 test' | sudo tee -a /etc/hosts

在你的命令中,这将是:

sshpass -e ssh -o UserKnownHostsFile=/dev/null -o 'StrictHostKeyChecking no' "$SSHUSER@$WPC_IP" "echo test | sudo tee -a /etc/hosts"

请注意,这需要没有 tty 的无密码 sudo 访问,这不一定与您的 sudo 权限相同。

【讨论】:

以上是关于使用 shell 脚本修改 /etc/hosts 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux shell中获取本机主机名

帮忙写个Linux下shell脚本,(使用sed命令处理hosts文件)

在 Mac OSX 10.6 中将新行附加到 etc/hosts 和 Apache httpd-vhosts.conf 的 Shell 脚本

如何在 shell 脚本中使用 tee 和 sshpass

shell 交互脚本菜单

[Linux] 快速修改hosts以访问github脚本