Muszę przesłać plik dziennika do zdalnego hosta przy użyciu protokołu SFTP z hosta Linux. Otrzymałem dane uwierzytelniające do tego samego z mojej grupy operacyjnej. Jednak ponieważ nie mam kontroli nad innym hostem, nie mogę generować i udostępniać kluczy RSA innemu hostowi.
Czy jest więc sposób na uruchomienie sftp
polecenia (z podaną nazwą użytkownika / hasłem) z poziomu skryptu Bash za pomocą zadania cron ?
Znalazłem podobne pytanie dotyczące przepełnienia stosu, podaj hasło do sftp w skrypcie Bash , ale nie było zadowalającej odpowiedzi na mój problem.
SSHPASS=password sshpass -e ...
powinieneś zrobić.sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
był dla mnie kluczowym brakującym elementem.Innym sposobem byłoby użycie lftp:
Wadą tej metody jest to, że inni użytkownicy komputera mogą odczytać hasło z narzędzi takich jak
ps
i to, że hasło może stać się częścią historii powłoki.Bardziej bezpieczną alternatywą, która jest dostępna od LFTP 4.5.0, jest ustawienie
LFTP_PASSWORD
zmiennej środowiskowej i wykonanie lftp z--env-password
. Oto pełny przykład:LFTP zawiera również funkcję fajnego tworzenia kopii lustrzanych (może obejmować usuwanie po potwierdzonym transferze
--Remove-source-files
):źródło
put-script
:open sftp://user:password@host; put local-file.name; exit
Następnie uruchom Wlftp -f put-script
ten sposób nie musisz mieć nazwy użytkownika i hasła w wierszu poleceń i możesz ustawić restrykcyjne uprawnienia do pliku skryptu.lftp
niż bałagan zsftp
isshpass
. Dobra odpowiedź.Expect to świetny program w użyciu.
W systemie Ubuntu zainstaluj go za pomocą:
Na maszynie CentOS zainstaluj ją z:
Powiedzmy, że chcesz nawiązać połączenie z serwerem SFTP, a następnie przesłać plik lokalny z komputera lokalnego na zdalny serwer SFTP
Otwiera to połączenie sftp z hasłem do serwera.
Następnie przechodzi do katalogu, do którego chcesz przesłać swój plik, w tym przypadku „logdirectory”
Spowoduje to przesłanie pliku dziennika z katalogu lokalnego znajdującego się w / var / log / z nazwą pliku file.log do "logdirectory" na zdalnym serwerze
źródło
Możesz użyć lftp interaktywnie w skrypcie powłoki, aby hasło nie zostało zapisane w .bash_history lub podobnym, wykonując następujące czynności:
Dodaj do swojego pliku:
I napisz / zamknij edytor vi po edycji hosta, użytkownika, hasła i katalogu do wpisywania pliku put.
:wq
Następnie spraw, aby skrypt był wykonywalnychmod +x test_script.sh
i wykonaj go./test_script.sh
.źródło
Niedawno poproszono mnie o przejście z ftp na sftp, aby zabezpieczyć transmisję plików między serwerami. Używamy pakietu Tectia SSH, który ma opcję
--password
podania hasła w linii poleceń.przykład:
sftp --password="password" "userid"@"servername"
Przykład partii:
Pomyślałem, że powinienem udostępnić te informacje, ponieważ przeglądałem różne witryny internetowe przed uruchomieniem polecenia pomocy (
sftp -h
) i byłem zaskoczony, widząc opcję hasła.źródło
ps
polecenie będzie mógł zobaczyć Twoje hasło.unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
Możesz to zmienić, włączając uwierzytelnianie bez hasła. Ale powinieneś zainstalować klucze (pub, priv) przed tym.
Wykonaj następujące polecenia na serwerze lokalnym.
Naciśnij klawisz ENTER dla wszystkich wyświetlonych opcji. Nie trzeba wpisywać żadnych wartości.
Połącz się ze zdalnym serwerem za pomocą następującego polecenia
Wykonaj następujące polecenia na serwerze zdalnym
Wykonaj następujące polecenie na serwerze lokalnym, aby przetestować uwierzytelnianie bez hasła. Powinien być podłączony bez hasła.
źródło
lftp -p ${port} -u ${login_id},${password} ${ip_number}
wywołane ze skryptu powłoki wydrukuje je gdzieś? Jak rozwiązałeś problem poza sshpass?lftp
i polegam nasshpass
obu systemach Mac i Linux.Połącz sshpass z zablokowanym plikiem poświadczeń i, w praktyce, jest tak bezpieczny jak wszystko inne - jeśli masz roota na skrzynce, aby odczytać plik z danymi uwierzytelniającymi, wszystkie zakłady i tak są wyłączone.
źródło
Program Bash czeka, aż sftp zapyta o hasło, a następnie wyśle je razem:
Być może będziesz musiał oczekiwać instalacji, zmień sformułowanie „Hasło” na małe litery „p”, aby dopasować je do tego, co otrzymujesz. Problem polega na tym, że ujawnia twoje hasło w postaci zwykłego tekstu w pliku, a także w historii poleceń. Co prawie przeczy celowi posiadania hasła.
źródło
Możesz do tego użyć sshpass. Poniżej znajdują się kroki
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
źródło