用 IP 地址替换参数

cla*_*n33 0 ssh bash shell

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

ssh_script aa11
Run Code Online (Sandbox Code Playgroud)

它执行:

ssh 111.222.333.444
Run Code Online (Sandbox Code Playgroud)

后续问题:某些系统需要端口 # 但我仍然想只输入 ssh_script bb22 并且它确实如此

ssh 333.444.555.666 -p 4444
Run Code Online (Sandbox Code Playgroud)

这可能吗?

tri*_*eee 5

这应该很容易。

#!/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"
Run Code Online (Sandbox Code Playgroud)

(这个脚本不使用 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
Run Code Online (Sandbox Code Playgroud)

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

您可以将两者结合起来;

Host aa11
  Hostname 111.222.333.444

Host bb22
  Hostname 333.444.555.666
  Port 4444
Run Code Online (Sandbox Code Playgroud)

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

  • 恕我直言,ssh 配置文件远远优于其他任何文件。如果您认为此信息不属于默认配置,例如,如果您想独立分发它,则“-F”可以在执行 ssh 时指定备用配置文件。(https://man7.org/linux/man-pages/man1/ssh.1.html) (5认同)
  • 如果您可以保存独立脚本,则可以按照 Daniel Farrell 的建议保存备用配置文件以使用“-F”指定。 (2认同)