заменить аргумент IP-адресом

#bash #shell #ssh

#bash #оболочка #ssh

Вопрос:

У меня есть список из примерно 50 систем с уникальными IP-адресами, к которым мне нужно регулярно подключаться по ssh. Я знаю эти системы по четырехзначному буквенно-цифровому номеру, но мне постоянно приходится искать IP-адреса всякий раз, когда я подключаюсь к ним по ssh. Я хотел бы создать скрипт bash, который содержит список всех IP-адресов для каждой машины, и я могу ввести:

 ssh_script aa11
  

и он выполняет:

 ssh 111.222.333.444
  

Последующий вопрос: для некоторых систем требуется порт #, но я все равно хотел бы просто ввести ssh_script bb22, и он выполняет

 ssh 333.444.555.666 -p 4444
  

Возможно ли это?

Комментарии:

1. Используйте DNS или /etc/hosts.

Ответ №1:

Это должно быть просто как таковое.

 #!/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" >amp;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 "$@"
  

(Не все sh экземпляры обязательно поддерживают ~ , хотя теперь это разрешено POSIX; возможно, переключитесь на "$HOME"/.ssh/config_too , если у вас устаревший sh в некоторых системах.)

Комментарии:

1. имхо конфигурационный файл ssh намного превосходит все остальное. -F можно указать альтернативный конфигурационный файл при выполнении ssh, если вы чувствуете, что эта информация не относится к конфигурации по умолчанию — например, если вы хотите распространять ее независимо. ( man7.org/linux/man-pages/man1/ssh.1.html )

2. работает как шарм спасибо @tripleee! мне нужно иметь возможность запускать это из разных систем и не иметь возможности редактировать конфигурацию для всех, поэтому этот автономный скрипт — именно то, что мне нужно.

3. Если вы можете сохранить автономный скрипт, вы можете сохранить альтернативный файл конфигурации для указания -F , как предложил Дэниел Фаррелл.