我有一个大约 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)
这可能吗?
这应该很容易。
#!/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在某些系统上有旧版本,可以切换到。)