Я'м использую Ubuntu 11.10. Я'м, используя СШ
для подключения ко многим серверам ежедневно, так что я положил их параметров `.файл SSH/config файл вот так:
Host Home
User netmoon
Port 22
HostName test.com
Есть ли способ поставить пароли для каждого подключения в этом файле, так что, когда сервер попросит пароль, терминал вводит пароль и отправляет его на сервер?
Мне это нужно, потому что иногда я стою далеко от компьютера, и когда я вернусь, введите пароль и нажмите <и>введите</роз> терминал пишет соединение разорвано
.
P. S. Я Дон'т хотите использовать открытый/закрытый ключ пары.
Работы безопасности для удобства никогда не заканчивается хорошо...
Вы могли бы использовать SSH-копия-ID
из `пакета OpenSSH-клиента пакет?
От человека SSH-копия-ID`:
СШ-копия-удостоверение личности-это скрипт, который использует SSH для входа на удаленный машины и добавить указанный файл удостоверение для машина'ы ~/.файл SSH/authorized_keys.
Если вы 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 и написать свой собственный код, чтобы разобрать этот файл и получить пароль для данного пользователя и Хоста.
Как насчет 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
Вы можете создать простой СШ замены скрипта в /usr/местные/Бен:
в <предварительно><код>#!/бин/Баш
хост=$1
пароль=awk и " по - /#пароль/ && inhost { с" принт \\\$2 } /хост/ { inhost=0 } /хост $рать/ { inhost=1 }; ~/.по SSH/config файл
если [[ -З " и$пароль на" ]]; затем /usr/Бен/СШ $ еще sshpass -P $по пароль /usr/Бен/СШ $ интернет </код></пре>
И тогда в ваш ~/.файл SSH/config можно использовать в <предварительно><код>хозяин foohost Baruser пользователей
</код></пре>
Я использую приложение от программного обеспечения Вандик называется и securecrt.
http://www.vandyke.com/products/securecrt/
Это не бесплатно, но по очень разумной цене. Я использовал его в течение многих лет (работает на Windows, или с помощью вина) для удаленного доступа, эмуляции терминала и (рассредоточенная) управления сетью. Они наконец-то выпустила родную версия для Linux это в начале 2011 года.
Он имеет поддержку комплексного настройки входа (или скрипты), сохраненные пароли (или сертификаты), вкладками несколько сеансов, и т. д.
При запуске вы можете выбрать, какие удаленные цели (и протокол) из структурированного списка (дерева) хранимых удаленного (или локального) машины, или просто создать соединение (которое сохраняется).
Я нашел это особенно полезно для удаленных сайтов с расширенной проверки подлинности, нестандартные порты, или брандмауэр-доступ к переговорам.
Если вы делаете удаленный доступ большое (частью вашего главной роли), то это приложение будет оправдывать свой счет в первый месяц использования.
Отвечая на вопрос, который вы задали, нет, это's не возможно, чтобы настроить пароль по умолчанию в файл SSH конфиг.
Но если действительно, как вы говорите, Это'ы и"потому что иногда я стою далеко от компьютера, и когда я вернусь, введите пароль и нажмите <и>введите</роз> терминал пишет соединение разорвано
то", то почему бы не допустить закрытия сессии, а? SSH может не разрывать соединение для вас.
Host Home
User netmoon
Port 22
HostName test.com
ServerAliveInterval 300
ServerAliveCountMax 2
Ответ @BrunoPereira этот вопрос показан альтернативный метод подключения без явного ввода пароля и избегая ключи SSH.
Можно создать скрипт, псевдоним или функция в `~/.bashrc и быстро выполнить эту команду.
Очевидно, есть соображения безопасности, вы должны учитывать этот подход.
Спасибо, Арек для вдохновения...
А не работает другой процесс оболочки, это просто функция выполняется в текущей оболочке 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/нуль интернет }
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
- это переменная окружения, держа свой пароль.
Наслаждайтесь!
Здесь's мой сложный вариация на @ArekBurdach'ы ответ. Он предлагает следующие расширения:
; т. е. он также поддерживает
СШ <аргументы> <хозяина> <команды>` синтаксисСШ
файле 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
Если вы 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 на "зашифровать ваш пароль и"
Есть небольшой вариант, как описано в блоге о том, как использовать sshpass
который можно найти здесь. Учитывая, что у вас зашифрованы Гоб пароль (как от этого описан в блоге) файл, который вы могли бы сделать нечто подобное:
раковину sshpass -P $по(эхо $(ГПГ -д -д .sshpasswd.Гоб)) СШ your_desination.АБВ `` и просто сохранить эту команду в качестве псевдонима в ваш
.bashrc следующее` .
Если вы хотите тоннеля через эту связь вы могли бы сделать что-то подобное `раковину Хозяин actual_dest Имя реальное.дест.АБВ Имя пользователя Sshpass -п ProxyCommand $(Эхо $(ГПГ -д -д ~/.sshpasswd.Гоб)) \ СШ your_destination.АБВ НК %ч %годовых ``