bash - 用 IP 地址替换参数
问题描述
我有一个大约 50 个系统的列表,这些系统具有我需要定期 ssh 进入的唯一 IP 地址。我通过四位字母数字数字了解这些系统,但是每当我 ssh 进入它们时,我都必须不断地查找 IP 地址。我想创建一个 bash 脚本,其中包含每台机器的所有 IP 地址列表,我可以键入:
ssh_script aa11
它执行:
ssh 111.222.333.444
后续问题:某些系统需要端口#但我仍然想输入 ssh_script bb22 并且确实如此
ssh 333.444.555.666 -p 4444
这可能吗?
解决方案
这应该很容易。
#!/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 "$@"
(即使现在 POSIX 强制要求,并非所有sh
实例都必须支持;如果您在某些系统上有旧版本,可能会切换到。)~
"$HOME"/.ssh/config_too
sh
推荐阅读
- postgresql - 获取所有具有当前值的序列
- python - 状态 200 但我没有得到一些响应。蟒蛇请求
- c# - 消除 C# Excel Interop 中的一系列行
- angular - 浏览器中不显示数据 - 仅允许使用数组和可迭代对象
- excel - 将通过输入框选择的列设置为变量
- c++ - C++ - 显式和隐式命名空间实现差异
- java - 如何将 EPOC 时间转换为日期字符串(YYYY-MM-dd)?
- security - 将从 socket.io-client 导出的对象放在 window 对象上会不会是一种安全妥协?
- vba - 使用样式或编号列表来选择标题之间的内容
- python - 当父类不返回任何内容而子类不返回时,如何正确子类化一个类