Eu preciso usar sshpass
para iniciar um comando remoto através do SSH a partir de um código Java.
Se eu digitar manualmente um console:
ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
funciona perfeitamente, mas pede senha. Então eu tentei correr sshpass
:
sshpass -p mypass ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -l user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -t user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh user@ipaddress echo 'OK'
e nenhum deles funciona.
fonte
StrictHostKeyChecking=accept-new
.sshpass
só funciona se o prompt de senha terminarassword:
.Se sua solicitação de senha for diferente, talvez seja necessário ajustar o código de origem
sshpass
para reconhecer a solicitação que você possui.Eu vi prompts de senha como
Password for user@host:
em alguns sistemas, talvez esse seja o seu problema.fonte
-P prompt Which string should sshpass search for to detect a password prompt
Eu acho que você quer algo como:
Por exemplo, isso funciona para mim:
fonte
Você configurou o login sem senha?
Logins sem senha com o OpenSSH http://www.debian-administration.org/articles/152
fonte
Há muitas maneiras de fazer isso, aqui está minha solução sugerida:
Primeiro de tudo, armazenar sua senha em uma variável é fornecer comandos mais flexíveis.
sshpass
tem uma opção para isso:-e
: esta opção permite ler a senha da$SSHPASS
variável de ambienteVocê tem duas maneiras de definir essa variável:
Defina diretamente no seu código:
Ou peça:
Do que executar seu comando;
Se o seu comando for estático, execute-o diretamente:
Se seu comando for dinâmico, use assim:
espero que isso ajude alguém.
fonte
readPassword
função, basta escrever sua senha, deve funcionar :) Só quero compartilhar meu código que é mostra um exemplo usandosshpass
para comandos dinâmicos: Dsshpass
usa pseudo terminais e aman
página inclui desculpas por quebrar ocasionalmente. Você também pode tentarfd0ssh
. Funciona se você não precisar enviarstdin
para um processo na máquina remota. Isso funciona se você apenas emitir um comando e capturar o resultado.fonte
A sintaxe sshpass é
Observe que não há espaço entre o -p e a senha.
Também tenho notado que você tem que se conectar com ssh pelo menos uma vez manualmente para obter a chave RSA da máquina que você está se conectando, para ir para o
~/.ssh/known_hosts
arquivo antes sshpass permitirá que você se conectar.então, depois de obter a entrada no arquivo known_hosts, posso executar um comando como
e executará o comando
uname -a
no servidor remoto e enviará os resultados para o padrão na máquina local.fonte
O que você precisa é
-f -t -t -t
Além disso, pode ser necessário remover o "requiretty" do sudo config (/ etc / sudoers) na máquina remota.
fonte
faça uma chave
ssh-keygen -t rsa
criar uma pasta .ssh no servidor remoto, ele solicitará uma senha
ssh $USER@SEVERNAME mkdir -p .ssh
copie a chave para o servidor remoto
cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'
Verifique se ele pede uma senha; caso contrário, deve funcionar.
fonte
A @exhuma teve um exemplo que o levou a trabalhar para mim.
A senha precisa estar na forma de
-pPassword
(sem o espaço)citações também podem ser necessárias:
sshpass -p'Password&0' user@hostname
fonte