首页 > 解决方案 > 用 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

这可能吗?

标签: bashshellssh

解决方案


这应该很容易。

#!/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_toosh


推荐阅读