Автоматизировать вход по SSH под Windows - PullRequest
1 голос
/ 16 июня 2009

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

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

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

Любая помощь будет оценена,

Билл.

Ответы [ 7 ]

9 голосов
/ 16 июня 2009

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

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

3 голосов
/ 16 июня 2009

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

2 голосов
/ 16 июня 2009

я использую 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
1 голос
/ 17 июня 2009

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

0 голосов
/ 04 декабря 2013

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

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

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

0 голосов
/ 28 июня 2012

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

0 голосов
/ 16 июня 2009

Я надеюсь Net :: SSH :: Expect Модуль Perl будет вам полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...