Se você realmente não quiser usar um par de chaves pública / privada, pode escrever um script expect
para inserir a senha automaticamente, dependendo do endereço de destino.
Edit: O que quero dizer é que você pode ter um script que, por um lado, usa expect
para inserir a senha para você e, por outro lado, lê a senha para um determinado usuário e host de uma configuração Arquivo. Por exemplo, o seguinte script python funcionará para o cenário de dia ensolarado:
#!/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)
e o formato do arquivo de configuração seria o seguinte:
[user_1]
host1 = passwd_1
host2 = passwd_2
[user_2]
host1 = passwd_1
host2 = passwd_2
Nota: Como explicado, o script python precisaria ser muito mais complexo para lidar com todos os possíveis erros e questionar as mensagens do ssh e todos os URLs possíveis (no exemplo, assume-se que será algo como user@host
, mas a parte do usuário não é usada na maioria das vezes), mas a ideia básica ainda seria a mesma. Registando o arquivo de configuração, você pode usar um arquivo de configuração diferente ou usar .ssh/config
e escrever seu próprio código para analisar esse arquivo e obter a senha para um determinado usuário e host.