【问题标题】:replace argument with an IP address用 IP 地址替换参数
【发布时间】:2020-10-19 15:18:15
【问题描述】:

我有一个列表,其中包含大约 50 个具有唯一 IP 地址的系统,我需要定期 ssh 进入这些系统。我通过一个四位字母数字数字了解这些系统,但是每当我 ssh 进入它们时,我都必须不断地查找 IP 地址。我想创建一个 bash 脚本,其中包含每台机器的所有 IP 地址列表,我可以输入:

ssh_script aa11

然后执行:

ssh 111.222.333.444

后续问题:有些系统需要端口号,但我仍然想输入 ssh_script bb22 就可以了

ssh 333.444.555.666 -p 4444

这可能吗?

【问题讨论】:

  • 使用 DNS 或 /etc/hosts。

标签: bash shell ssh


【解决方案1】:

这应该很容易。

#!/bin/sh
port=22
case $1 in
 aa11) host=111.222.333.444;;
 bb22) host=333.444.555.666
    port=4444;;
 *) echo "$0: host $1 unknown" >&2
    exit 2;;
esac
exec ssh -p "$port" "$host"

(这个脚本没有使用 Bash 功能,所以我输入了#!/bin/sh。当然,它也应该适用于 Bash。)

但可能更好的解决方案是在您的 ~/.ssh/config 中进行配置;那么它也将对scp 和在内部调用ssh 的程序透明地工作,例如git

Host aa11
  Hostname 111.222.333.444

Host bb22
  Hostname 333.444.555.666
  Port 4444

有关此文件的详细信息,请参阅ssh_config 手册页。

你可以把两者结合起来;

#!/bin/sh

test -e ~/.ssh/config_too || cat <<\: >~/.ssh/config_too
Host aa11
  Hostname 111.222.333.444

Host bb22
  Hostname 333.444.555.666
  Port 4444
:
exec ssh -F ~/.ssh/config_too "$@"

(并非所有sh 实例都必须支持~,即使它现在是POSIX 强制要求的;如果您在某些系统上有一个旧的sh,可能切换到"$HOME"/.ssh/config_too。)

【讨论】:

  • imho ssh 配置文件远远优于其他任何东西。 -F 可以在 ssh 执行时指定一个备用配置文件,如果您觉得此信息不属于默认配置 - 例如,如果您想独立分发它。 (man7.org/linux/man-pages/man1/ssh.1.html)
  • 像魅力一样工作谢谢@tripleee!我需要能够从不同的系统运行它并且不能编辑所有的配置,所以这个独立的脚本正是我所需要的。
  • 如果您可以保存独立脚本,则可以保存备用配置文件以使用 -F 指定,如 Daniel Farrell 建议的那样。
猜你喜欢
  • 1970-01-01
  • 2016-06-24
  • 2015-09-25
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多