Сценарий SSH-функции с ошибкой «Соединение отказано»

Это довольно просто. Просто следуйте шагам.

Пример сценария:

  • /dev/sda1 - CentOS

  • /dev/sdb1 - Debian

Предположим, что на диске CentOS активна MBR. Значит, после загрузки мы имеем доступ к системе CentOS; Debian нужно добавить.

Задачи под активной ОС (CentOS в нашем сценарии):

  1. mount /dev/sdb1 /mnt/debian

  2. Вырезаем весь menuentry раздел Debian из /mnt/debian/boot/grub{2}/grub.cfg, как показано ниже:

    menuentry 'Debian GNU/Linux' --class debian --class gnu-linux ... { ... }

  3. Теперь создайте файл: touch /etc/grub.d/11_linux

  4. Поскольку это скрипт, не забудьте сделать: chmod +x /etc/grub.d/11_linux

  5. Add:

    #!/bin/sh
    echo "
    

    в начало 11_linux и вставьте этот раздел. Закончив с " в конце. Итак, у нас должно получиться:

    centos #~> cat /etc/grub.d/11_linux
    
    #!/bin/sh
    echo "menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-78026456-ebcc-4eed-b59d-a3f0bdff7353' {
     load_video
     insmod gzio
     if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
     insmod part_msdos
     insmod ext2
     set root='hd0,msdos1'
     if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 f2de4123-5a98-4568-99dd-e61940b99ab2
     else
     search --no-floppy --fs-uuid --set=root f2de4123-5a98-4568-99dd-e61940b99ab2
     fi
     echo 'Загрузка Linux 3.16.0-4-amd64 ...'
     linux /vmlinuz-3.16.0-4-amd64 root=/dev/mapper/Thinkpad--vg-root ro quiet
     echo 'Loading initial ramdisk ...'
     initrd /initrd.img-3.16.0-4-amd64
    }"
    
  6. grub2-mkconfig -o /boot/grub{2}/grub.cfg

  7. Перезагрузка.

Вуаля.

1
02.03.2016, 01:14
1 ответ

Если я правильно понял, у вас есть конвейер, который генерирует список имен хостов (ec2-describe-instances ... | grep ... | grep ...), вы берете первую строку (head -1) и хотите использовать ее в качестве имени хоста для подключения. Вы передаете имя хоста на стандартный вход функции sshec2 и вызываете функцию без аргументов. Поэтому, когда функция выполняется, $argv[1] пуст, и в итоге вы запускаете ssh с аргументами -i, /home/dearrfish/. ssh/key.pem, -t, -t, ubuntu@. Если вы ввели в командную строку ssh и соединение прошло, то вывод конвейера ... | head -1 будет передан в программу, которую запускает ssh.

Вместо этого вам нужно передать имя хоста в качестве первого аргумента функции. Инструментом для этого является подстановка команды.

sshec2 (ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
        grep 'INSTANCE' |
        grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |
        head -1)
1
27.01.2020, 23:48

Теги

Похожие вопросы