2009-06-16 2 views
1

Я хочу, чтобы иметь возможность запуска openssh с некоторыми пользовательскими аргументами, а затем иметь возможность автоматического входа на сервер. Я хочу, чтобы мой скрипт вводил пароль при необходимости и вводил «да», если мне было предложено добавить отпечаток пальца к известным хостам.Автоматизация входа SSH под окнами

Я нашел SharpSsh для C#, которые это делают, но мне также нужно использовать параметр -D и использовать ProxyCommand, который я определяю в SSH, и для библиотеки этого недостаточно.

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

Любая помощь была бы оценена,

Bill.

ответ

9

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

Пожалуйста, настоятельно рекомендуем использовать public key mechanisms, который можно легко и безопасно автоматизировать.

2

Я использую pexpect для аналогичной цели и загружаю также работу? http://sourceforge.net/project/downloading.php?group_id=59762&filename=pexpect-2.3.tar.gz

здесь часть сюда мой SSH автоматизированного сценария, вы можете настроить его для вас использования он не может работать из коробки

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 
3

Я второй рекомендации использовать открытый ключ аутентификации , Вместо того, чтобы взломать с ожиданием, вы можете рассмотреть Paramiko - это собственный SSH-клиент для Python, который значительно упростит процесс связи, особенно если вам когда-либо понадобится взаимодействие с удаленным сервером, и у него есть поддержка таких вещей, в.

+0

Я также собирался предложить Paramiko, но Крис избил меня к нему. – ShawnMilo

+0

Слишком плохо, что у него нет встроенного scp. – g33kz0r

+0

Noah: вы хотите использовать SFTP, если это вообще возможно, поскольку scp-протокол «ad-hoc». Клиенты SFTP имеют тенденцию взаимодействовать намного более последовательно - не проблема, если вы используете OpenSSH везде, но я столкнулся с различными проблемами с коммерческими SSH-серверами –

1

Существует excellent documentation при использовании Putty сгенерированной аутентификацией ключа SSH. Это простой и безопасный способ достижения ваших целей. Putty обладает отличным набором функций для приложения SSH для Windows. Еще лучше, если учесть, что вы можете get it on the free.

0

pexpect не может быть импортировано в Windows. Итак, я использую plink.exe с подпроцессом Python для подключения к ssh-серверу.

0

Другой способ - использовать openssh и установить доверенный ключ; если оба клиента и учетная запись пользователя на сервере имеют этот ключ, то openssh не запрашивает пароль.

У меня есть сценарий, который автоматизирует установку этого - она ​​работает под Cygwin,

http://mosermichael.github.io/cstuff/all/projects/2011/07/14/ssh-friends.html

 Смежные вопросы

  • Нет связанных вопросов^_^