Я хочу, чтобы иметь возможность запуска openssh с некоторыми пользовательскими аргументами, а затем иметь возможность автоматически войти на сервер. Я хочу, чтобы мой script вводил пароль при необходимости и вводил "да", если мне было предложено добавить отпечаток пальца к известным хостам.
Я нашел SharpSsh для С#, который это делает, но мне также нужно использовать параметр -D и использовать ProxyCommand, который я определяю в SSH, и для библиотеки этого недостаточно.
Еще одна вещь, которую я нашел, была Pexon, которая должна была сделать трюк, но я не мог найти, где ее скачать, на официальной странице меня перенаправляют из sourceforge на некорректную ссылку.
Любая помощь будет оценена,
Билл.
Если вы используете OpenSSH, а затем script, чтобы ввести пароль в ясный (это означает, что вы сохранили пароль незашифрованным), он побеждает цель безопасной оболочки.
Пожалуйста, решите использовать механизмы открытого ключа, которые можно легко и безопасно автоматизировать.
Я рекомендую использовать аутентификацию с открытым ключом. Вместо того, чтобы ожидать от вас ожидания, вы можете рассмотреть Paramiko - это собственный SSH-клиент для Python, который значительно упростит процесс связи, особенно если вам когда-либо нужно взаимодействовать с удаленным сервером, и он поддерживает такие функции, как встроенный SFTP.
Я использую pexpect для аналогичной цели и загружаю также работу? http://sourceforge.net/project/downloading.php?group_id=59762&filename=pexpect-2.3.tar.gz
вот часть моего ssh automate script, вы можете настроить его для использования это может не закончиться из коробки
import os
import getpass
import pexpect
import glob
import logging
import shutil
import time
class UpdateError(Exception): pass
g_password = None
def runSshCommand(cmd):
global g_password
ssh_newkey = 'Are you sure you want to continue connecting'
# my ssh command line
p=pexpect.spawn(cmd)
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==0:
print "Saying yes to connection.."
p.sendline('yes')
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
while True:
if g_password is None:
g_password = getpass.getpass("password:")
p.sendline(g_password)
i = p.expect(['password:',pexpect.EOF])
if i==0:
g_password = None
print "Wrong password"
else:
break
elif i==2:
raise UpdateError("Got key or connection timeout")
return p.before
Существует отличная документация при использовании Putty с генерируемой аутентификацией ключа SSH. Это простой и безопасный способ достижения ваших целей. Putty имеет большой набор функций для приложения SSH для Windows. Еще лучше, если учесть, что вы можете получить его бесплатно.
Другой способ - использовать openssh и установить доверенный ключ; если оба клиента и учетная запись пользователя на сервере имеют этот ключ, то openssh не запрашивает пароль.
У меня есть script, который автоматизирует настройку этого - он работает под cygwin,
http://mosermichael.github.io/cstuff/all/projects/2011/07/14/ssh-friends.html
pexpect
не может импортироваться в Windows. Таким образом, я использую plink.exe
с подпроцессом Python для подключения к серверу ssh.
Я надеюсь, Net::SSH::Expect Модуль Perl поможет вам.