2013-06-05 8 views
19

Chcę użyć SSH wewnątrz skryptu, ale ten skrypt nie zostanie wykonany na moim komputerze.Podaj hasło do polecenia ssh w skrypcie bash, Bez użycia kluczy publicznych i Oczekuj

W mojej implementacji istnieją dwa ograniczenia.

  • Nie mogę pracować poza standardem powłoki, dlatego nie mogę używać expect, ponieważ nie wiem, czy będzie dostępny na tym komputerze.
  • Nie mogę oczekiwać, że ta maszyna będzie mieć public keys dla SSH.

Jakie są możliwe opcje-rozwiązania?

W jaki sposób mogę zapewnić ssh z żądanym hasłem w sposób zautomatyzowany i bezpieczny bez dodawania dodatkowych zależności?

Czy będzie możliwe podanie hasła w skrypcie?

Dziękuję wszystkim z góry :)

+0

Są inne języki, takie jak Perl lub Python dostępne? –

+0

zwykle tak, ale w python wiem, że jest to możliwe :) Dziękuję i tak – stratis

Odpowiedz

11

przede wszystkim: Nie kładź sekrety w postaci zwykłego tekstuchyba wiesz dlaczego jest to bezpieczne rzeczy do zrobienia (np. oszacowałeś, jakie szkody może wyrządzić atakujący znając sekret).

Jeśli jesteś ok z oddanie tajemnice w skrypcie, można wysyłać klucz ssh z nim i wykonać w ssh-agent powłoki:

#!/usr/bin/env ssh-agent /usr/bin/env bash 
KEYFILE=`mktemp` 
cat <<EOF> ${KEYFILE} 
-----BEGIN RSA PRIVATE KEY----- 
[.......] 
EOF 
ssh-add ${KEYFILE} 

# do your ssh things here... 

# Remove the key file. 
rm -f ${KEYFILE} 

Zaletą korzystania z kluczy ssh jest to, że można łatwo wykorzystać forced commands ograniczyć to, co osoba uprawniona może zrobić na serwerze.

Bardziej bezpieczne podejście byłoby niech skrypt uruchomić ssh-keygen -f ~/.ssh/my-script-key stworzenia specjalnego klucza prywatnego do tego celu, ale wtedy trzeba także procedurę dodawania klucz publiczny do serwera.

+3

Zaczynam od stwierdzenia, że ​​generowanie klucza prywatnego dla potrzeb skryptu i po jego usunięciu będzie jedynym rozwiązaniem. Dziękuję bardzo – stratis

+0

To była najbliższa odpowiedź na moje pytanie:) Dziękuję – stratis

1

AFAIK nie ma możliwości korzystania z przycisków obok lub oczekiwać, jeśli używasz wersji wiersza poleceń ssh. Istnieją jednak powiązania bibliotek dla większości języków programowania, takich jak C, python, php, .... Możesz napisać program w takim języku. W ten sposób możliwe będzie automatyczne przekazanie hasła. Ale uwaga to oczywiście problem bezpieczeństwa jako hasło będą przechowywane w postaci zwykłego tekstu w tym programie

+0

dziękuję :) Byliście pomocni przynajmniej pokazując mi, co jest możliwe.I pomyślałem o rozwijaniu w python ale liniami kodu dla polecenia ssh w pythonie jest 100 razy więcej niż w wersji shella ssh :) – stratis

+0

Problem polega na tym, że polecenie 'ssh' oczekuje hasła pochodzącego z terminala. dlatego oczekuj, ponieważ symuluje terminal. Być może można to zrobić w łatwy sposób. Nie wiem jak. Jednak powinieneś znaleźć 100 linii używając google;) – hek2mgl

27

Install sshpass, a następnie uruchomić polecenie:

sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no [email protected] 
+0

Dziękuję bardzo, ale nie mogę się spodziewać, że komputer, który uruchomię skrypt będzie miał zainstalowany sshpass, to jest powód, którego nie mogę się spodziewać. – stratis

16

Ze względów bezpieczeństwa należy unikać zapewniając hasło w wierszu poleceń inaczej ktoś działa polecenie ps widać hasła. Lepiej użyć sshpass użyteczność takiego:

#!/bin/bash 

export SSHPASS="your-password" 
sshpass -e ssh -oBatchMode=no [email protected] 

może być zainteresowany w How to run the sftp command with a password from Bash script?

+0

Dziękuję bardzo, ale nie mogę się spodziewać, że komputer, na którym uruchomię skrypt, będzie miał zainstalowany sshpass, dlatego nie używam tego powodu. – stratis

+0

Tak, może nie być już zainstalowany, ale można go pobrać z podanego łącza i skompilować go samodzielnie. Nie wymaga żadnych uprawnień administratora. – anubhava

+0

Czy muszę go pobrać na każdym komputerze, na którym chcę uruchomić skrypt? Jeśli jest to coś, co mogę zaimplementować do mojego kodu, to jest w porządku, ale chcę tylko stworzyć samodzielny skrypt, który będzie w stanie uruchomić wszędzie bez potrzeby uprawnień, dodatkowych paczek. Z tego powodu chciałem pozostać w standardzie. – stratis

Powiązane problemy