Como eu me conectaria a outro computador através do SSH em uma linha? Se eu fosse fazer ssh host@IP
, seria necessário digitar a senha na segunda linha. Eu estava pensando que poderia fazer algo assim:, ssh host@IP | echo password
mas isso coloca a senha antes de solicitá-la.
26
ssh
leria a senha do stdin,echo password | ssh host@IP
funcionaria, mas geralmente o SSH tenta ler diretamente do terminal.Respostas:
Você deve usar as chaves SSH para se autenticar, em vez de colocar sua senha na linha de comando, pois é extremamente insegura.
A maneira como isso funciona é quando as chaves SSH são configuradas, tudo o que você precisa fazer é emitir o comando:
e sem digitar outra coisa, você será automaticamente conectado.
Copie a chave pública SSH para Mac / FreeBSD / Linux do macOS
Isso pressupõe que você tenha acesso ao servidor remoto via autenticação baseada em senha (digitando uma senha) e que você já gerou seu par de chaves pública / privada (caso contrário, veja abaixo). No exemplo a seguir, estamos usando o RSA. Para começar, copie a chave (lembre-se de que o diretório "home" difere entre macOS, Linux, BSD etc.):
Usando SCP:
Ou simplesmente colocar o arquivo
authorized_keys
(eu prefiro este método):(O nome da sua chave pode ser diferente) Se o diretório .ssh não existir no servidor remoto, você precisará fazer login e criá-lo.
Agora, a chave foi copiada do mac para o servidor remoto . Defina as permissões corretas para a chave pública SSH no servidor remoto:
Em seguida, inclua a chave no arquivo SS_ allowed_keys, se o arquivo não existir, crie-o.
Se o arquivo
authorized_keys
já existir no~/.ssh
use o seguinte comando:Se o arquivo não existir, digite os seguintes comandos:
Gere chave pública / privada SSH no macOS
Abra o Terminal, vá para Aplicativos -> Utilitários -> Terminal
No terminal, use o seguinte comando para iniciar a geração de chaves
Em seguida, você será solicitado a fornecer o local em que deseja criar o arquivo de chave privada:
Digite o arquivo no qual salvar a chave (
/Users/username/.ssh/id_rsa
):Deixe em branco para criar a chave no local padrão, que é
/Users/username/.ssh/id_rsa
. O arquivo de chave pública será criado no mesmo local e com o mesmo nome, mas com a extensão .PUB.Depois, você será solicitado a escolher uma senha. Essa é a senha opcional para usar a chave privada.
Sua chave SSH é gerada.
Agora, lembre-se de que, se você digitar uma senha, será necessário digitá-la sempre que se conectar. O utilitário
ssh-agent
manterá a senha na memória, aliviando a necessidade de inseri-la manualmente toda vez que você se conectar enquanto estiver na mesma sessão. Para mais detalhes, consulteman ssh-agent
fonte
ssh-copy-id
é uma boa ferramenta para automatizar algumas das opções acima.Existem várias possibilidades. Seu exemplo obviamente não funcionará, mas você pode obter algo semelhante usando o
sshpass
utilitário:Observe que isso não é recomendado, pois
password
ficará visível para outros processos ou no histórico do shell.Uma maneira muito melhor de fazer o mesmo é configurar a autenticação sem senha usando chaves SSH. Em resumo:
fonte
sshpass
como você recomendou, mas ele disse que o comando não foi encontrado.ps auxw | grep sshpass
informar aos outros usuários a senha do ssh.pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh [email protected]
. Ozzzzzzzz
é literal; O sshpass mascara o conteúdo da senha. Talvez as iterações anteriores tenham menos consciência de privacidade.Passei muito tempo procurando a resposta para isso também. Apesar de ser inseguro e de todas essas pessoas dizerem para você usar chaves RSA ( que é uma idéia mais segura e confiável ), é bem possível.
Use um programa chamado
expect
para isso. O Expect irá assistir ao stdout (e acho que o stderr se configurado corretamente) por você, aguardando determinadas mensagens e respondendo a elas com a saída. O próprio esperar é realmente uma linguagem de script e, quando eu fazia a mesma coisa, era muito difícil conseguir que meu próprio script funcionasse corretamente devido ao tempo. No entanto, o expect também inclui um utilitário útil chamadoautoexpect
.Com a autoexpect, ele o observará e gerará um script de expectativa para você. Basta executar o autoexpect e o comando que você deseja:
e faça o que você normalmente faria. Quando você sai do programa (digitando
exit
no shell ssh'd), ele gera o script. Caso você não queira que todo o script que você está escrevendo esteja em um script esperado, você pode editar o script de autoexpect (chamadoscript.exp
) para sair antes de digitar oexit
comando no shell. A linha que você deseja mover para alterar o final do script é:o que significa esperar o final do arquivo. Espero que isto ajude!
fonte
O uso
expect
é totalmente errado para fazer login em uma conexão ssh para algo que não seja em um conjunto de testes.O que o @ ben-a está procurando já está implementado no ssh. O truque é como usá-lo. Então aqui vai:
ssh-keygen
. Use ECDSA ou RSA como-t
(ou tipo) e para RSA use 2048 ou 4096 como-b
(ou comprimento do BITS). Isso deve ser suficiente no momento da escrita. SEMPRE use uma SENHA!ssh-copy-id
metodologia mencionada acima para criar na máquina em que você está efetuando logon (também conhecido como servidor) o~/.ssh/authorized_keys
arquivo. Dentro, há uma cópia da chave pública que você acabou de gerar.~/.ssh/config
. Se não existir, você pode criá-lo.Neste arquivo, você adiciona o seguinte para suas necessidades
Agora você pode usar apenas
ssh <name>
para configurar a conexão, mas ainda precisará da senha da sua chave. Para resolver isso, use o ssh-agent desenvolvido para essa finalidade e incluído. Para adicionar sua chave ao agente, basta usarssh-add <path to keyfile>
. Você será solicitado a senha e ela armazenará a chave para você com segurança nesta sessão. Se gerar o erro "não é possível encontrar o agente ssh" (ou similar), isso significa que provavelmente o agente não foi iniciado. Você pode iniciá-lo para esta sessão usandossh-agent bash
. Isso iniciará um novo shell com o agente ativo nele.Ao usar essas etapas, você não apenas dificulta a representação de alguém ao seqüestrar suas credenciais, mas também mantém a usabilidade em ordem (é mais fácil de usar do que as senhas comuns).
fonte