Вы можете установить пароли .по SSH/config, чтобы разрешить автоматический вход в систему?

Я'м использую Ubuntu 11.10. Я'м, используя СШ для подключения ко многим серверам ежедневно, так что я положил их параметров `.файл SSH/config файл вот так:

Host Home
User netmoon
Port 22
HostName test.com

Есть ли способ поставить пароли для каждого подключения в этом файле, так что, когда сервер попросит пароль, терминал вводит пароль и отправляет его на сервер?

Мне это нужно, потому что иногда я стою далеко от компьютера, и когда я вернусь, введите пароль и нажмите <и>введите</роз> терминал пишет соединение разорвано.

P. S. Я Дон'т хотите использовать открытый/закрытый ключ пары.

Комментарии к вопросу (2)
Решение

Работы безопасности для удобства никогда не заканчивается хорошо...

Вы могли бы использовать SSH-копия-ID из `пакета OpenSSH-клиента пакет?

От человека SSH-копия-ID`:

СШ-копия-удостоверение личности-это скрипт, который использует SSH для входа на удаленный машины и добавить указанный файл удостоверение для машина'ы ~/.файл SSH/authorized_keys.

Комментарии (8)

Если вы Don't действительно хотите использовать открытый/закрытый ключ пары, вы можете написать "ожидать" скрипт для ввода пароля, Вы автоматически в зависимости от адреса назначения.

Редактировать: я имею в виду, что вы можете иметь скрипт, что, с одной стороны, использует "ожидать", чтобы ввести пароль для вас и, с другой стороны, считывает пароль для данного пользователя и данного хоста из файла конфигурации. Например, следующий скрипт Python будет работать на солнечный день сценарий:

#!/usr/bin/python                                                                                                                        
import argparse
from ConfigParser import ConfigParser
import pexpect

def main(args):
    url = args.url
    user, host = url.split('@', 1)

    cfg_file = 'ssh.cfg'
    cfg = ConfigParser()
    cfg.read(cfg_file)
    passwd = cfg.get(user, host)

    child = pexpect.spawn('ssh {0}'.format(url))
    child.expect('password:')
    child.sendline(passwd)
    child.interact()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Run ssh through pexpect')
    parser.add_argument('url')
    args = parser.parse_args()
    main(args)

и формат файл конфигурации будет выглядеть следующим образом:

[user_1]
host1 = passwd_1
host2 = passwd_2

[user_2]
host1 = passwd_1
host2 = passwd_2

Примечание: как указывалось выше, в Python скрипт должен быть гораздо более сложным для обработки всех возможных ошибок, и вопрос сообщения от SSH и все возможные URL-адреса (в примере это'ы предполагали, что это будет что-то вроде пользователь@хост, но пользователей это'т используется в большинстве случаев), но основная идея все равно останется. О файле конфигурации, можно использовать другой конфигурационный файл или использовать.по SSH/config и написать свой собственный код, чтобы разобрать этот файл и получить пароль для данного пользователя и Хоста.

Комментарии (4)

Как насчет ProxyCommand:

Host Home-raw
    HostName test.com
Host Home
   User netmoon
   Port 22
   ProxyCommand sshpass -pmypass ssh netmoon@%h-raw nc localhost %p

Вы можете использовать СШ-Ш вместо НЗ, а также:

ProxyCommand sshpass -pmypass ssh netmoon@%h-raw -W localhost:%p
Комментарии (3)

Есть также программы sshpass на это. Как использовать: sshpass -п MyPa55word СШ me@myservor.com

Комментарии (7)

Нет. Это не возможно, я'м боится.

Единственной реальной альтернативой является использование закрытых ключей, но вы'вэ-сказал Вы Don'т хотите (почему нет?).

Комментарии (6)

Вы можете создать простой СШ замены скрипта в /usr/местные/Бен:

в <предварительно><код>#!/бин/Баш

хост=$1 пароль=awk и " по - /#пароль/ && inhost { с&quot принт \\\$2 } /хост/ { inhost=0 } /хост $рать/ { inhost=1 }; ~/.по SSH/config файл

если [[ -З " и$пароль на" ]]; затем /usr/Бен/СШ $ еще sshpass -P $по пароль /usr/Бен/СШ $ интернет </код></пре>

И тогда в ваш ~/.файл SSH/config можно использовать в <предварительно><код>хозяин foohost Baruser пользователей

Foobarpassword пароль

</код></пре>

Комментарии (0)

Я использую приложение от программного обеспечения Вандик называется и securecrt.

http://www.vandyke.com/products/securecrt/

Это не бесплатно, но по очень разумной цене. Я использовал его в течение многих лет (работает на Windows, или с помощью вина) для удаленного доступа, эмуляции терминала и (рассредоточенная) управления сетью. Они наконец-то выпустила родную версия для Linux это в начале 2011 года.

Он имеет поддержку комплексного настройки входа (или скрипты), сохраненные пароли (или сертификаты), вкладками несколько сеансов, и т. д.

При запуске вы можете выбрать, какие удаленные цели (и протокол) из структурированного списка (дерева) хранимых удаленного (или локального) машины, или просто создать соединение (которое сохраняется).

Я нашел это особенно полезно для удаленных сайтов с расширенной проверки подлинности, нестандартные порты, или брандмауэр-доступ к переговорам.

Если вы делаете удаленный доступ большое (частью вашего главной роли), то это приложение будет оправдывать свой счет в первый месяц использования.

Комментарии (4)

Отвечая на вопрос, который вы задали, нет, это's не возможно, чтобы настроить пароль по умолчанию в файл SSH конфиг.

Но если действительно, как вы говорите, Это'ы и"потому что иногда я стою далеко от компьютера, и когда я вернусь, введите пароль и нажмите <и>введите</роз> терминал пишет соединение разорваното", то почему бы не допустить закрытия сессии, а? SSH может не разрывать соединение для вас.

Host Home
  User netmoon
  Port 22
  HostName test.com
  ServerAliveInterval 300
  ServerAliveCountMax 2
Комментарии (0)

Ответ @BrunoPereira этот вопрос показан альтернативный метод подключения без явного ввода пароля и избегая ключи SSH.

Можно создать скрипт, псевдоним или функция в `~/.bashrc и быстро выполнить эту команду.

Очевидно, есть соображения безопасности, вы должны учитывать этот подход.

Комментарии (1)

Спасибо, Арек для вдохновения...

А не работает другой процесс оболочки, это просто функция выполняется в текущей оболочке bash. Он работает в одном в awk команда для разбора конфигурационного файла и выяснить, если он должен взять пароль из оболочки переменной или пароль написано открытым текстом в СШ конфигурационный файл (с программисты в ивал вместо описать из-за проблем, я попал через "описать").

Я пытался так много способов использования sshpass прямо в СШ config с помощью ProxyCommand, но ничто, казалось, не работать, как ожидалось, за исключением, когда я могу войти в ящик через РСА, а затем мне нужно отправить пароль на открытие моей зашифрованный каталог. Однако, моя функция ниже, кажется, работает для меня во всех случаях, даже под Cygwin.

``Баш

В вашем .файл

функция СШ(){ узел=$1; сбросить пароль сбросить PASSVAR функция eval $(awk и я;/ #[ПП]assvar / && inhost { е \"и PASSVAR=%з\то",\$2; покинуть 1 } / #[пп]пароль / && inhost { е \"и пароль=%з\то",\$2; } /^#?[Чч][ОО][СС][ТТ] / && inhost { inhost=0; покинуть 1 } /^[чч][ОО][СС][ТТ] $\ узел$/ { inhost=1 }" и ~/.по SSH/config файл) если [[ -З " и$пароль и" ]] &ампер;&ампер; [[ -з " и$PASSVAR на" ]]; затем /usr/Бен/СШ-Щ $ 2 и GT;/dev/нуль еще если [[ -н " и$PASSVAR на" ]]; затем ПАРОЛЬ=$(ТМП=${!PASSVAR-};Эхо ${ТМП##-}) интернет /usr/местные/Бен/sshpass -П" по$пароль" и /usr/Бен/СШ-г $ 2 и GT;/dev/нуль интернет }

настройки и пароли (возможно .вместо bashrc следующее...)

MYPASS_ENVVAR=SomePassword MYPASSWD_FROM_FILE=$(</домой/меня/.passwd_in_file) ``

Затем в `~/.раздел по SSH/config файл выглядит так:

Host MyHostname
 Port 22
 Hostname 2.1.2.2
 User merrydan
 #Passvar MYPASS_ENVVAR
 #Password Some!Password

Если #Passvar существует в разделе config это переопределяет #пароль. $MYPASS_ENVVAR - это переменная окружения, держа свой пароль.

Наслаждайтесь!

Комментарии (0)

Здесь's мой сложный вариация на @ArekBurdach'ы ответ. Он предлагает следующие расширения:

  • в host может быть в любом месте в командной строке по SSH; т. е. он также поддерживаетСШ <аргументы> <хозяина> <команды>` синтаксис
  • не жесткий код путь к СШ
  • более надежный парсинг файле sshd_config
  • Бонус: обертка для УПП тоже

СШ-фантик

#!/bin/bash

password=$(awk '
BEGIN {
    # Collect the SSH arguments as keys of a dictionary, so that we can easily
    # check for inclusion.
    for (i = 2; i < ARGC; i++) {
        sshArgs[ARGV[i]] = 1
    }

    # Only process the first argument; all others are the command-line arguments
    # given to ssh.
    ARGC = 2
}
$1 == "Password" && inhost { print $2 }
/^\s*Host\s/ {
    if ($2 in sshArgs)
        inhost=1
    else
        inhost=0
}
' ~/.ssh/config "$@")

if [ "$password" ]; then
    sshpass -p "$password" "$(which ssh)" "$@"
else
    "$(which ssh)" "$@"
fi

УПП-фантик

#!/bin/bash

password=$(awk '
BEGIN {
    # Collect the SCP arguments as keys of a dictionary, so that we can easily
    # check for inclusion.
    for (i = 2; i < ARGC; i++) {
        colonIdx = index(ARGV[i], ":")
        if (colonIdx > 0) {
            scpArgs[substr(ARGV[i], 1, colonIdx - 1)] = 1
        }
    }

    # Only process the first argument; all others are the command-line arguments
    # given to scp.
    ARGC = 2
}
$1 == "Password" && inhost { print $2 }
/^\s*Host\s/ {
    if ($2 in scpArgs)
        inhost=1
    else
        inhost=0
}
' ~/.ssh/config "$@")

if [ "$password" ]; then
    sshpass -p "$password" "$(which scp)" "$@"
else
    "$(which scp)" "$@"
fi

Установка ###

Определить псевдонимы в файле ~/.bashrc следующее:

alias ssh=ssh-wrapper
alias scp=scp-wrapper

Конфигурации ###

С IgnoreUnknownдирективыСШ` не жалуется на недавно введенный "пароль" директивы, поэтому (в отличие от @ArekBurdach'ы ответа), мы можем сделать это выглядеть как-то "Реал" и конфигурацию. Если вы Don'т, как это, Это'ы тривиально, чтобы изменить сценарий в закомментированных один.

# Allow specifying passwords for Host entries, to be parsed by ssh-wrapper.
IgnoreUnknown Password

Host foohost
    User baruser
    Password foobarpassword
Комментарии (1)

Если вы Don'т иметь прямой доступ к ключевым пары, вы могли бы зашифровать пароль на локальном компьютере.

Лучший способ сделать это [шифрование пароля с помощью ключа][1] в дополнение к @Эрик Вудрафф 'с ProxyCommand.

Способ объединить использование трубы:

openssl rsautl -decrypt -inkey /path/to/decrypt_key -in /path/to/encrypted_password  | sshpass ssh real-destination -tt

где

Host real-destination
    Hostname test.com
    User netmoon

[1]: https://superuser.com/questions/576506/how-to-use-ssh-rsa-public-key-to-encrypt-a-text на "зашифровать ваш пароль и"

Комментарии (0)

Есть небольшой вариант, как описано в блоге о том, как использовать sshpass который можно найти здесь. Учитывая, что у вас зашифрованы Гоб пароль (как от этого описан в блоге) файл, который вы могли бы сделать нечто подобное: раковину sshpass -P $по(эхо $(ГПГ -д -д .sshpasswd.Гоб)) СШ your_desination.АБВ `` и просто сохранить эту команду в качестве псевдонима в ваш.bashrc следующее` .

Если вы хотите тоннеля через эту связь вы могли бы сделать что-то подобное `раковину Хозяин actual_dest Имя реальное.дест.АБВ Имя пользователя Sshpass -п ProxyCommand $(Эхо $(ГПГ -д -д ~/.sshpasswd.Гоб)) \ СШ your_destination.АБВ НК %ч %годовых ``

Комментарии (0)