用IP地址替换参数

时间:2020-10-18 16:35:09

标签: bash shell ssh

我有大约50个系统列表,这些系统具有我需要定期转入的唯一IP地址。我知道这些系统是由四位数的字母数字组成的,但是每当我将它们放入ssh时,它们总是必须查找IP地址。我想创建一个bash脚本,其中包含每台计算机的所有IP地址的列表,我可以输入:

ssh_script aa11

它执行:

ssh 111.222.333.444

跟进问题:某些系统需要端口号,但是我仍然只想输入ssh_script bb22即可,

ssh 333.444.555.666 -p 4444

这可能吗?

1 个答案:

答案 0 :(得分: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"

(此脚本不使用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现在已要求它支持;如果某些系统上的"$HOME"/.ssh/config_too较旧,则可以切换到sh。)