我有大约50个系统列表,这些系统具有我需要定期转入的唯一IP地址。我知道这些系统是由四位数的字母数字组成的,但是每当我将它们放入ssh时,它们总是必须查找IP地址。我想创建一个bash脚本,其中包含每台计算机的所有IP地址的列表,我可以输入:
ssh_script aa11
它执行:
ssh 111.222.333.444
跟进问题:某些系统需要端口号,但是我仍然只想输入ssh_script bb22即可,
ssh 333.444.555.666 -p 4444
这可能吗?
答案 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
。)