AWS多个实例从命令行通过ssh连接(无需记住密钥对名称和用户)

伊夫蒂

我有四个带有50多个实例的AWS账户。每天我必须连接其中的大多数。因此,每次当我想通过ssh连接实例时,都必须先登录AWS账户,然后才能找到密钥对名称和IP。因为很难记住所有IP和密钥对。因此,我希望工具或脚本能够轻松完成,而无需记住密钥对名称和用户。

注意:我已经从命令行通过ssh下载了密钥对连接:ssh -i kepairname user @ IP

哈迪·鲁斯特(Hardy Rust)

您可以使用~/.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/并创建了配置:

$ 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章