najłatwiejszym sposobem na podanie hasła za każdym razem, gdy przenosisz lub logujesz się do ssh, jest utworzenie klucza, oto jak możesz to zrobić w 2 krokach brightery.com/en/post/ ...
Muhammad El-Saeed
Odpowiedzi:
44
Powinieneś użyć pliku klucza bez hasła do skryptowego logowania ssh. Jest to oczywiście zagrożenie bezpieczeństwa, należy uważać, aby sam plik klucza był odpowiednio zabezpieczony.
Nie ma możliwości wpisania hasła w tekście polecenia?
liysd,
3
Niełatwo, nie ma na to opcji w ssh
Mad Scientist
Należy zauważyć, że nie zawsze jest to możliwe (np. Wiele implementacji serwera ssh dla systemu Android jest dość ograniczonych).
Ponkadoodle
@Ponkadoodle OP dotyczy żądań po stronie klienta, a nie po stronie serwera. ssh -izawsze powinno być możliwe po stronie klienta. Czy masz na myśli, że serwer może nie obsługiwać wszystkich typów kluczy (np. ECDSA)? Nie byłby to jednak poważny problem, tylko przypadek używania ssh-keygen -t. Czy coś mi brakuje?
Jonathan H
1
Chociaż na początku może się to wydawać kłopotliwe, to jest poprawna odpowiedź. Hasła to poufne informacje i nie należy ich przechowywać w sposób przejrzysty ani nieostrożnie używać w programach. Po to są pliki kluczy; po prostu dowiedz się o plikach tożsamości rsync -eissh -i .
Wiem, że to nie jest najlepsza praktyka, ale mam serwer NAS z uszkodzonym dyskiem SSHD, który nie obsługuje uwierzytelniania opartego na kluczach. Ta odpowiedź była brakującym elementem mojej układanki automatycznego tworzenia kopii zapasowych. Więc +1 za ostateczną odpowiedź
Mike Gossmann
8
Jeśli nie można użyć keyfile, ale nie chce, aby to hasło w poleceniu można napisać go do tymczasowego pliku i umieścić go w ten sposób: sshpass -p`cat .password` ssh [...]. Następnie zabezpiecz .passwordplik, chmod 400 .passwordaby upewnić się, że tylko użytkownik może go odczytać.
lutuh
5
Dla kompletności, w przypadku ssh'ing do zdalnego serwera, src_pathpowinien być serwer: ścieżka, tak jak poniżej:server01.mydomain.local:/path/to/folder
harperville
to jest zdecydowanie dobra odpowiedź! pozwala na wykonywanie skryptów bez magii ssh, po prostu skrypty. ;) Kudos @Rajendra
Genuinefafa
1
ponieważ -awłączenie rsync obejmuje -rlptgoD, możesz skrócić polecenie w następujący sposób:rsync -az ...
Jannie Theunissen
24
Możesz uniknąć monitu o hasło przy rsyncpoleceniu, ustawiając zmienną środowiskową RSYNC_PASSWORDna hasło, którego chcesz użyć, lub używając --password-fileopcji.
działa tylko wtedy, gdy serwer docelowy ma uruchomionego demona rsync
Darryl Hebbes
4
Mimo że ta odpowiedź nie pomaga, chyba że używasz demona rsync, Google wylądował mnie tutaj i było to dokładnie to, czego potrzebowałem. Dla mnie potrzebowałem bezpośredniego rsync do rsyncd, bez ssh. Po prostu użyłem opcji pliku z hasłem i działałem idealnie dla skryptu.
gregthegeek
15
Jeśli nie możesz użyć kluczy publicznych / prywatnych, możesz użyć oczekiwać:
Będziesz musiał zamienić SRC i DEST na swoje normalne parametry źródłowe i docelowe rsync oraz zastąpić PASS swoim hasłem. Tylko upewnij się, że ten plik jest bezpiecznie przechowywany!
Jeśli używam klucza z ssh, piszę: ssh u @ serv -i ./rsa Ale jak to zrobić w rsync?
liysd
2
Jeśli umieścisz klucz w swoim katalogu .ssh i nadasz mu standardową nazwę (zazwyczaj id_rsa / id_rsa.pub), zostanie on automatycznie pobrany przez rsync.
Craig Trader
6
Inna interesująca możliwość:
wygeneruj parę kluczy RSA lub DSA (tak jak zostało to opisane)
wstaw klucz publiczny do hosta (tak jak zostało to już opisane)
biegać:
rsync --partial --progress --rsh = "ssh -i dsa_private_file" nazwa_hosta @ host: / home / me / d.
Uwaga: -i dsa_private_file, który jest Twoim kluczem prywatnym RSA / DSA
Zasadniczo to podejście jest bardzo podobne do tego opisanego przez @Mad Scientist, jednak nie musisz kopiować swojego klucza prywatnego do ~ / .ssh. Innymi słowy, jest to przydatne do zadań ad-hoc (jednorazowy dostęp bez hasła)
-a już implikuje -rlptgoD i ogólnie o wiele bardziej pomocne byłoby posiadanie tutaj skróconej linii poleceń.
Christian
4
Automatyczne wprowadzanie hasła dla polecenia rsync jest trudne. Moim prostym sposobem uniknięcia problemu jest zamontowanie folderu, którego kopia zapasowa ma zostać utworzona. Następnie użyj lokalnego polecenia rsync, aby wykonać kopię zapasową zamontowanego folderu.
mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
Oficjalne rozwiązanie (i inne) były niekompletne, kiedy po raz pierwszy odwiedziłem, więc wróciłem po latach, aby opublikować to alternatywne podejście na wypadek, gdyby ktoś inny znalazł się tutaj i zamierzał użyć pary kluczy publiczny / prywatny:
Wykonaj to z docelowej maszyny kopii zapasowej, która ściąga kopię zapasową ze źródła do celu
Jeśli nadal otrzymujesz monit o podanie hasła, musisz sprawdzić konfigurację ssh /etc/ssh/sshd_configi sprawdzić, czy użytkownicy w źródle i docelowi mają odpowiedni publiczny klucz ssh innych, wysyłając je za pomocą ssh-copy-id [email protected].
(Ponownie, dotyczy to używania par kluczy ssh bez hasła jako alternatywnego podejścia, a nie przekazywania hasła przez plik).
Ważną uwagą na marginesie jest to, że w przykładzie portu alternatywnego kierujesz ssh do pliku klucza prywatnego, a gdy wykonuje polecenie u celu, uwierzytelnia się za pomocą klucza publicznego.
oemb1905
-1
Zgodnie z pomysłem opublikowanym przez Andrew Seaforda, odbywa się to za pomocą sshfs:
Odpowiedzi:
Powinieneś użyć pliku klucza bez hasła do skryptowego logowania ssh. Jest to oczywiście zagrożenie bezpieczeństwa, należy uważać, aby sam plik klucza był odpowiednio zabezpieczony.
Instrukcje dotyczące konfigurowania dostępu SSH bez hasła
źródło
ssh -i
zawsze powinno być możliwe po stronie klienta. Czy masz na myśli, że serwer może nie obsługiwać wszystkich typów kluczy (np. ECDSA)? Nie byłby to jednak poważny problem, tylko przypadek używaniassh-keygen -t
. Czy coś mi brakuje?rsync -e
issh -i
.Użyj nieinteraktywnego narzędzia dostawcy haseł ssh „sshpass”
Na Ubuntu
Polecenie rsync
źródło
sshpass -p`cat .password` ssh [...]
. Następnie zabezpiecz.password
plik,chmod 400 .password
aby upewnić się, że tylko użytkownik może go odczytać.src_path
powinien być serwer: ścieżka, tak jak poniżej:server01.mydomain.local:/path/to/folder
-a
włączenie rsync obejmuje-rlptgoD
, możesz skrócić polecenie w następujący sposób:rsync -az ...
Możesz uniknąć monitu o hasło przy
rsync
poleceniu, ustawiając zmienną środowiskowąRSYNC_PASSWORD
na hasło, którego chcesz użyć, lub używając--password-file
opcji.źródło
Jeśli nie możesz użyć kluczy publicznych / prywatnych, możesz użyć oczekiwać:
Będziesz musiał zamienić SRC i DEST na swoje normalne parametry źródłowe i docelowe rsync oraz zastąpić PASS swoim hasłem. Tylko upewnij się, że ten plik jest bezpiecznie przechowywany!
źródło
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
Mam to do pracy w ten sposób:
źródło
remote_port_ssh
było ustawione? Wygląda jak symbol zastępczy rzeczywistej wartości.Użyj klucza ssh.
Spójrz na
ssh-keygen
issh-copy-id
.Następnie możesz użyć
rsync
tego sposobu:źródło
Inna interesująca możliwość:
Uwaga: -i dsa_private_file, który jest Twoim kluczem prywatnym RSA / DSA
Zasadniczo to podejście jest bardzo podobne do tego opisanego przez @Mad Scientist, jednak nie musisz kopiować swojego klucza prywatnego do ~ / .ssh. Innymi słowy, jest to przydatne do zadań ad-hoc (jednorazowy dostęp bez hasła)
źródło
U mnie działa:
Musiałem zainstalować
sshpass
źródło
Automatyczne wprowadzanie hasła dla polecenia rsync jest trudne. Moim prostym sposobem uniknięcia problemu jest zamontowanie folderu, którego kopia zapasowa ma zostać utworzona. Następnie użyj lokalnego polecenia rsync, aby wykonać kopię zapasową zamontowanego folderu.
źródło
Chociaż już to zaimplementowałeś,
możesz również użyć dowolnej oczekiwanej implementacji (znajdziesz alternatywy w Perlu, Pythonie: pexpect, paramiko itp.)
źródło
Używam do tego pliku VBScript na platformie Windows, obsługuje mnie bardzo dobrze.
źródło
Oficjalne rozwiązanie (i inne) były niekompletne, kiedy po raz pierwszy odwiedziłem, więc wróciłem po latach, aby opublikować to alternatywne podejście na wypadek, gdyby ktoś inny znalazł się tutaj i zamierzał użyć pary kluczy publiczny / prywatny:
Wykonaj to z docelowej maszyny kopii zapasowej, która ściąga kopię zapasową ze źródła do celu
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' [email protected]:/home/user/Server/ /home/keith/Server/
Wykonaj to z maszyny źródłowej, która wysyła ze źródła do docelowej kopii zapasowej
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ [email protected]:/home/user/Server/
A jeśli nie używasz alternatywnego portu dla ssh, rozważ bardziej eleganckie przykłady poniżej:
Wykonaj to z docelowej maszyny kopii zapasowej, która ściąga kopię zapasową ze źródła do celu:
sudo rsync -avi --delete [email protected]:/var/www/ /media/sdb1/backups/www/
Wykonaj to z maszyny źródłowej, która wysyła ze źródła do docelowej kopii zapasowej:
sudo rsync -avi --delete /media/sdb1/backups/www/ [email protected]:/var/www/
Jeśli nadal otrzymujesz monit o podanie hasła, musisz sprawdzić konfigurację ssh
/etc/ssh/sshd_config
i sprawdzić, czy użytkownicy w źródle i docelowi mają odpowiedni publiczny klucz ssh innych, wysyłając je za pomocąssh-copy-id [email protected]
.(Ponownie, dotyczy to używania par kluczy ssh bez hasła jako alternatywnego podejścia, a nie przekazywania hasła przez plik).
źródło
Zgodnie z pomysłem opublikowanym przez Andrew Seaforda, odbywa się to za pomocą sshfs:
źródło