Serwer zezwala na połączenia SSH, ale nie korzysta z uwierzytelniania za pomocą klucza publicznego. W tej chwili nie jestem w stanie zmienić tego (z powodu trudności technicznych, a nie organizacyjnych), ale załatwię to jak najszybciej!
Co muszę teraz jest do wykonywania poleceń na serwerze przy użyciu zwykłego stare konto + hasło uwierzytelniania ze skryptu . To znaczy, muszę to zrobić w sposób nieinteraktywny. Czy to możliwe? Jak mam to zrobić?
Klient, który będzie wykonywał skrypt, uruchomi Ubuntu Server 8.04. Serwer obsługuje Cygwin i OpenSSH.
Odpowiedzi:
Istnieje narzędzie linux o nazwie
sshpass
. Pozwala ci robić dokładnie to, co chcesz i pobierze hasło serwera albo jako argument wiersza poleceń, albo z pliku (wolę w ten sposób, aby moje hasło do serwera nie było wyświetlane w historii powłoki) i używasz go tak:sshpass -f file_with_password ssh user@server ls -la
Spowoduje to ssh na serwerze i uruchomienie
ls -la
. Jedną rzeczą jest jednak ręczne ręczne ssh na serwerze (jeśli jeszcze tego nie zrobiłeś), aby serwer został dodany do twojego~/.ssh/known_hosts
. Jeśli tego nie zrobisz,sshpass
nie będzie działać.źródło
SSH_ASKPASS
zmiennej jest bardziej ogólnym rozwiązaniem, które działa w każdym systemie z OpenSSH i nie wymaga instalowania dodatkowego oprogramowania. Dla niektórych z nas (w regulowanych branżach) instalowanie nowego oprogramowania wymaga dużo pracy administracyjnej.SSH_ASKPASS
nie działa we wszystkich systemach. Nawet jeśli klient go obsługuje, nie będzie działać, jeśli serwer go używakeyboard-interactive
. Tak naprawdę napotkałem ten problem podczas pisania skryptu w celu dystrybucjiauthorized_keys
pliku na wiele wbudowanych maszyn.Aby to zrobić, możesz użyć opcji Oczekuj . Oczywiście nie jest to preferowane z punktu widzenia bezpieczeństwa, ponieważ będzie wymagało użycia skryptu zawierającego hasło w postaci zwykłego tekstu. (Ale nie będę omawiać tej kwestii, ponieważ powiedziałeś w swoim pytaniu, że planujesz jak najszybciej zastosować uwierzytelnianie za pomocą klucza publicznego!)
źródło
Zależy trochę od używanego języka skryptowego. Piszę teraz prawie wszystko w pythonie, gdzie nie jest to problem. Zarówno pyssh, jak i Paramiko pozwalają po prostu napisać hasło bez kłopotów.
Jeśli zamierzasz to zrobić za pomocą skryptów (ba) sh i używać OpenSSH, staje się to trudniejsze. OpenSSH wyraźnie zapobiega wprowadzaniu haseł w wierszu poleceń (ponieważ wszyscy użytkownicy widzą wiersz poleceń za pomocą czegoś takiego
ps -fe
, co jest złym mojo). W takim przypadku będziesz musiał bezpośrednio współpracować z programem ssh i mieć dwie opcje:źródło