AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 241588
Accepted
Eonil
Eonil
Asked: 2011-03-02 03:07:12 +0800 CST2011-03-02 03:07:12 +0800 CST 2011-03-02 03:07:12 +0800 CST

Como automatizar o login SSH com senha?

  • 772

Como automatizar o login SSH com senha? Estou configurando minha VM de teste, portanto, a segurança pesada não é considerada. SSH escolhido para segurança aceitável com configuração mínima.

ex)

echo password | ssh id@server

Isso não funciona.

Lembro que fiz isso com alguns truques que alguém me orientou, mas não lembro agora o truque que usei...

password ssh automation
  • 10 10 respostas
  • 1998510 Views

10 respostas

  • Voted
  1. weekens
    2013-06-01T01:08:28+08:002013-06-01T01:08:28+08:00
    $ sudo apt-get install sshpass
    $ sshpass -p your_password ssh user@hostname
    
    • 826
  2. Best Answer
    Cakemox
    2011-03-02T03:17:09+08:002011-03-02T03:17:09+08:00

    Não use uma senha. Gere uma chave SSH sem senha e envie-a por push para sua VM.

    Se você já possui uma chave SSH, pode pular esta etapa… Basta pressionar Entera chave e as duas senhas:

    $ ssh-keygen -t rsa -b 2048
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/username/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/username/.ssh/id_rsa.
    Your public key has been saved in /home/username/.ssh/id_rsa.pub.
    

    Copie suas chaves para o servidor de destino:

    $ ssh-copy-id id@server
    id@server's password:
    

    Agora tente fazer login na máquina, com ssh 'id@server', e faça o check-in:

    .ssh/authorized_keys
    

    Nota: Se você não tiver o diretório .ssh e o arquivo authorized_keys, você precisa criá-lo primeiro

    para garantir que não adicionamos chaves extras que você não esperava.

    Por fim, verifique para fazer login…

    $ ssh id@server
    
    id@server:~$
    

    Você também pode querer usar ssh-agentse quiser tentar manter suas chaves protegidas com uma senha.

    • 581
  3. lzap
    2011-11-15T04:57:13+08:002011-11-15T04:57:13+08:00

    Embora a resposta correta para sua pergunta seja sshpass ( consulte outra resposta para obter detalhes ), existe uma maneira mais segura - chaves SSH. Você está a apenas três passos da solução:

    Todos os comandos a seguir estão sendo executados no lado do cliente, ou seja, sua máquina

    Digite o seguinte comando para começar a gerar um par de chaves rsa :

    # ssh-keygen
    

    Quando a mensagem 'Digite o arquivo no qual deseja salvar a chave' aparecer, basta deixar o nome do arquivo em branco pressionando Enter.

    Quando o terminal pedir para você digitar uma senha, deixe também em branco (Aviso: leia abaixo) e pressione Enter.

    Em seguida, copie o par de chaves no servidor com um comando simples :

    # ssh-copy-id userid@hostname
    

    agora você pode fazer login sem uma senha :

    # ssh userid@hostname
    

    AVISO : Deixar as chaves SSH expostas sem criptografá-las não é uma boa prática, mesmo se você criptografar toda a sua unidade. O que é muito mais seguro é realmente inserir uma senha ao gerar chaves e, em seguida, usar o Keychain (MacOS, Linux) ou o agente SSH para lembrar a senha até você sair ou suspender ou expirar, dependendo do que você preferir.

    • 113
  4. ooshro
    2011-03-02T03:08:41+08:002011-03-02T03:08:41+08:00

    Use esperar:

    #!/usr/bin/expect -f
    #  ./ssh.exp password 192.168.1.11 id
    set pass [lrange $argv 0 0]
    set server [lrange $argv 1 1]
    set name [lrange $argv 2 2]
    
    spawn ssh $name@$server
    match_max 100000
    expect "*?assword:*"
    send -- "$pass\r"
    send -- "\r"
    interact
    

    Exemplo:

    # ./1.ex password localhost ooshro
    spawn ssh ooshro@localhost
    ooshro@localhost's password: 
    Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
    Ubuntu 10.10
    
    Welcome to Ubuntu!
     * Documentation:  https://help.ubuntu.com/
    Last login: Tue Mar  1 12:41:12 2011 from localhost
    
    • 57
  5. nrolans
    2018-12-21T13:35:20+08:002018-12-21T13:35:20+08:00

    O logon único SSH geralmente é obtido com autenticação de chave pública e um agente de autenticação. Você pode adicionar facilmente sua chave de VM de teste a um agente de autenticação existente (veja o exemplo abaixo). Existem outros métodos, como gssapi/kerberos, mas são mais complexos.

    sshpass

    Em situações em que passwordé o único método de autenticação disponível, o sshpass pode ser usado para inserir a senha automaticamente. Preste atenção especial à seção CONSIDERAÇÕES DE SEGURANÇA da página man . Em todas as três opções, a senha é visível ou armazenada em texto simples em algum momento :

    Pipe anônimo (recomendado por sshpass)

    # Create a pipe
    PIPE=$(mktemp -u)
    mkfifo -m 600 $PIPE
    # Attach it to file descriptior 3
    exec 3<>$PIPE
    # Delete the directory entry
    rm $PIPE
    # Write your password in the pipe
     echo 'my_secret_password' >&3
    # Connect with sshpass -d
    sshpass -d3 ssh user@host
    
    # Close the pipe when done
    exec 3>&-
    

    É bastante complicado no bash, sem dúvida mais fácil com linguagens de programação. Outro processo pode ser anexado ao seu pipe/fd antes que a senha seja escrita. A janela de oportunidade é bastante curta e limitada aos seus processos ou raiz.

    Variável de ambiente

    # Set your password in an environment variable
     export SSHPASS='my_secret_password'
    # Connect with sshpass -e
    sshpass -e ssh user@host
    

    Você e o root podem ler as variáveis ​​de ambiente do seu processo (ou seja, sua senha) enquanto o sshpass está sendo executado ( cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=). A janela de oportunidade é muito maior, mas ainda limitada aos seus próprios processos ou raiz, não a outros usuários.

    Argumento de linha de comando (menos seguro)

     sshpass -p my_secret_password ssh user@host
    

    Isso é conveniente, mas menos seguro, conforme descrito na página do manual. Os argumentos da linha de comando são visíveis para todos os usuários (por exemplo ps -ef | grep sshpass, ). sshpass tenta esconder o argumento, mas ainda há uma janela durante a qual todos os usuários podem ver sua senha passada por argumento.

    Nota

    Defina sua variável bash HISTCONTROL para ignorespaceou ignorebothe prefixe seus comandos sensíveis com um espaço. Eles não serão salvos na história.


    Autenticação de chave pública SSH

    # Generate a key pair
    # Do NOT leave the passphrase empty
    ssh-keygen
    # Copy it to the remote host (added to .ssh/authorized_keys)
    ssh-copy-id user@host
    

    A senha é muito importante. Qualquer pessoa que de alguma forma obtiver o arquivo de chave privada não poderá usá-lo sem a senha.

    Configurar o agente de autenticação SSH

    # Start the agent
    eval `ssh-agent`
    # Add the identity (private key) to the agent
    ssh-add /path/to/private-key
    # Enter key passphrase (one time only, while the agent is running)
    

    Conecte-se como de costume

    ssh user@host
    

    A vantagem é que sua chave privada é criptografada e você só precisa digitar sua senha uma vez (por meio de um método de entrada mais seguro também).

    • 46
  6. eadmaster
    2018-07-10T05:15:34+08:002018-07-10T05:15:34+08:00

    Estou surpreso que ninguém tenha mencionado plinko putty-toolspacote no Ubuntu:

    plink user@domain -pw mypass  [cmd]
    

    Também está disponível no Windows e a sintaxe é compatível principalmente com o cliente openssh.

    • 31
  7. James L
    2011-03-02T03:52:29+08:002011-03-02T03:52:29+08:00

    Isso pode não ser útil para você, mas você pode fazer isso com Perl:

    \#!/usr/bin/perl  
    use warnings;  
    use strict;  
    
    use Net::SSH::Perl;  
    my $host = 'remote.serv.er';  
    my $user = 'root';  
    my $pass = 'hunter2';  
    my $ssh = Net::SSH::Perl->new('$host');  
    $ssh->login('$user', '$pass') or die "Oh noes! $!";
    
    • 21
  8. Badr Elmers
    2020-01-12T15:26:34+08:002020-01-12T15:26:34+08:00

    Eu prefiro passh https://github.com/clarkwang/passh

    sshpass é quebrado por design.

    quando o servidor ssh não está adicionado já no meu known_hosts, sshpassnão vai me mostrar a mensagem para adicionar o servidor aos meus hosts conhecidos, passhnão tenho esse problema.

    Faça login em um servidor remoto:

    $ passh -p password ssh user@host
    
    • 8
  9. Coops
    2011-03-02T03:14:42+08:002011-03-02T03:14:42+08:00

    Tem certeza de que não quer usar chaves SSH em vez de senhas? Dessa forma, é seguro e automático.

    • 7
  10. Cameron Kerr
    2018-11-23T00:30:37+08:002018-11-23T00:30:37+08:00

    Dependendo de suas necessidades de automação, talvez o Ansible seja uma boa opção para você. Ele pode gerenciar muito bem coisas como solicitar senha, solicitar senha sudo, várias maneiras de alterar o uso, usar com segurança segredos criptografados (cofre).

    Se isso não for adequado, sugiro o Expect, conforme sugerido em outra resposta.

    • 6

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve