passando as senhas para um script

3

Eu quero scp um arquivo para um host remoto e, a partir daí, executar um comando no arquivo e sair da sessão remota. Se eu escrever um script normal, chame scp e, em seguida, ssh , eu sou solicitado a inserir duas senhas. Existe uma maneira de copiar, ssh e executar um comando em uma máquina remota com uma senha?

Além disso, como escrever scripts que precisam interagir com o usuário para inserir senhas?

Eu não quero usar "read" porque não é seguro. Eu não quero usar sem senha ssh , já que meu arquivo de chave privada pode estar comprometido, o que é ainda pior. Eu li algo sobre "esperar", mas não tenho certeza se é a ferramenta certa.

    
por eli 05.02.2012 / 05:29

4 respostas

4

I do not want to use passwordless ssh, since my private key file may be compromised, which is even worse.

Não, isso está errado. Um arquivo de chave privada fornece mais segurança que uma senha. Use um arquivo de chave privada. O arquivo de chave privada é criptografado com uma senha; Se alguém receber o arquivo de chave, ele ainda precisará da sua senha. Se você estivesse usando a autenticação por senha, qualquer um que tivesse acesso à senha estaria em casa.

Execute ssh-agent pela duração da sua sessão. Antes de usar uma chave específica, insira a senha com ssh-add (ou por meio de um prompt da GUI). Então não haverá um aviso quando você se conectar usando esta chave.

    
por 06.02.2012 / 02:19
2

Is there a way to copy, ssh, and run a command on a remote machine with one password?

Existem duas maneiras, variando em sua conveniência e trade-offs.

Um é transferir o arquivo inline. Você precisa de uma entrada diferente do conteúdo do arquivo? Caso contrário, ssh example.com 'cat > the_file ; process the_file' < the_file fará o que você deseja.

O outro é fazer algo que reutilize a conexão SSH. ControlMaster e amigos para o ssh podem ajudar - veja ssh_config(1) para detalhes, ou existem vários wrappers, ou implementações do SSH para várias linguagens de programação que ajudam.

Also how to write scripts which need to interact with user to enter passwords?

Leia a partir do TTY. Geralmente, a melhor estratégia é permitir que o ssh interaja diretamente com o usuário e não atrapalhe, porque ele tem uma implementação muito melhor testada e validada de interagir dessa maneira.

I do not want to use read as it's not safe.

Para interagir com o usuário, presumo. Não é substancialmente diferente em termos de segurança deixar apenas o SSH perguntar, na verdade, mas é ideal ficar fora do caminho.

I do not want to use passwordless ssh, since my private key file may be compromised, which is even worse.

... e presumo que o agente de SSH não seja aceitável pelo mesmo motivo.

    
por 05.02.2012 / 05:36
2

Usar 'esperar' para o que você pergunta é possível e algumas pessoas ainda o usam. Um script esperado pode "capturar" a saída dos comandos e você pode "responder" com base em sua saída. Seu script será parecido com:

spawn scp some_file user@host:/destination
expect "*?assword:*"
send -- "Your Super Secret Password Here\r"
send -- "\r"

Claro que isso funcionaria, mas aumentaria outro problema. Sua senha será salva em um formato de texto simples e qualquer pessoa que ler este arquivo poderá ver sua senha.

Minha opinião pessoal é que a maneira não interativa mais segura é a autenticação de chave privada.

    
por 05.02.2012 / 12:52
0

Você pode usar ssh keys, mas atribuí-las a um usuário personalizado no sistema remoto cujo shell não está definido para um shell real, mas um comando que você deseja executar. O efeito será no login que o comando é executado e, em seguida, o terminal será fechado. Então, se a senha for comprometida, eles não poderão entrar interativamente nos comandos, mas apenas executar o conjunto de comandos como o shell.

    
por 06.02.2012 / 05:01