AWS多实例通过ssh从命令行连接(不需要记住keypairname和user)



我有四个AWS帐户,有50多个实例。每天我都要连接他们中的大多数。因此,每次当我想通过ssh连接实例时,都必须首先登录AWS帐户,然后必须找到密钥对名称和IP。因为要记住所有的IP和密钥是非常困难的。因此,我希望工具或脚本可以轻松完成,而无需记住密钥对名称和用户。

注意:我已经下载了keypairssh -i kepairname user@IP

您可以使用~/.ssg/config选项。像这样:

Host server1
Hostname 1.2.3.4
User user1
IdentityFile kepairname1

Host server2
Hostname 1.2.3.5
User user2
IdentityFile kepairname2

之后,您将能够通过

连接到您的主机
ssh server1
ssh server2

如果您使用任何其他选项,它们中的任何一个都可以添加到该配置中。与往常一样,man ssh_config中有完整的信息。

如果您想要交互式选择,您可以使用简单的bash脚本。在这个例子中,我创建了目录~/.ssh/config.d/并创建了configs:

$ ls -1 ~/.ssh/config.d/
AWS
DigitalOcean

然后这个简单的脚本可以用来交互地连接到你的服务器:

#!/bin/bash
# Defining constant
CONFIG_DIR="$HOME/.ssh/config.d/"
# Add providers to array
PROVIDERS=($(ls -1 "$CONFIG_DIR"))
# select uses PS3 as a prompt
PS3='Select provider: '
select prov in ${PROVIDERS[@]}; do
  if [[ -n $prov ]]; then
    provider=$prov
    echo "You have selected $provider"
    break
  else
    echo 'Wrong selection.'
  fi
done
# Defining config file and parsing instances from it
CONF_FILE="${CONFIG_DIR}${provider}"
INSTANCES=($(awk '/Host / {print $2}' "$CONF_FILE"))
PS3='Select instance: '
select inst in ${INSTANCES[@]}; do
  if [[ -n $inst ]]; then
    instance=$inst
    echo "You have selected $instance"
    ssh -F "$CONF_FILE" $instance
    break
  else
    echo 'Wrong selection.'
  fi
done

它是这样工作的:

$ bash test.sh
1) AWS
2) DigitalOcean
Select provider: 34
Wrong selection.
Select provider: 2
You have selected DigitalOcean
1) server1
2) server2
Select instance: 2
You have selected server2
ssh: connect to host 1.2.3.5 port 22: No route to host

相关内容

最新更新