Wiem, że nie jest to zalecane, ale czy w ogóle można przekazać hasło użytkownika do scp?
Chciałbym skopiować plik za pomocą scp jako część zadania wsadowego, a serwer odbierający oczywiście potrzebuje hasła i nie mogę go łatwo zmienić na uwierzytelnianie oparte na kluczach.
linux
scp
io-redirection
Argelbargel
źródło
źródło
Odpowiedzi:
Możesz napisać skrypt za pomocą narzędzia takiego jak expect (istnieją również przydatne wiązania, takie jak Pexpect for Python).
źródło
Użyj sshpass :
tak więc hasło nie pojawia się w historii bash
Powyższe kopiuje zawartość ścieżki ze zdalnego hosta do twojego lokalnego.
Zainstalować :
apt install sshpass
yum install sshpass
port install sshpass
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
źródło
apt-get install sshpass
yum -y install sshpass
sshpass -f
passwdfile` scp [...]. This way, the password won't show up in
ps`, itp. I możesz zabezpieczyć hasło za pomocą uprawnień do plików.po prostu wygeneruj klucz ssh, taki jak:
skopiuj zawartość
~/.ssh/id_rsa.pub
i dodaj ją na odległych komputerach~/.ssh/authorized_keys
upewnij się, że zdalny komputer ma uprawnienia
0700 for ~./ssh folder
i0600 for ~/.ssh/authorized_keys
źródło
ssh-copy-id -i ~/.ssh/id_rsa.pub <remote_server>
do skopiowania klucza na zdalnym serwerzeJeśli łączysz się z serwerem z Windows, Putp w wersji scp („pscp”) pozwala przekazać hasło z
-pw
parametrem.Jest to wspomniane w dokumentacji tutaj.
źródło
pscp -pw 'MyPa$$word' username@servername:/somedir/somefile ~/somedest
(Nienawidzę używania takiego kitu, ale działa)curl może być używany jako alternatywa dla scp do kopiowania pliku i obsługuje hasło w wierszu poleceń.
źródło
scp
musi czekać ponad 30 sekund, aby pozwolić mi wprowadzić hasło, alecurl
zadziałało natychmiast.Możesz użyć skryptu „expect” na unix / terminal
Na przykład utwórz „test.exp”:
uruchom skrypt
Mam nadzieję że to pomogło.
źródło
Oto przykład tego, jak to zrobić za pomocą
expect
narzędzia:źródło
Nikt o tym nie wspomniał, ale Putty scp (pscp) ma opcję -pw dla hasła.
Dokumentację można znaleźć tutaj: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp
źródło
Możesz użyć,
ssh-copy-id
aby dodać klucz ssh:Jeśli istnieje:
źródło
Po skonfigurowaniu w
ssh-keygen
sposób opisany powyżej możesz to zrobićscp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/
Jeśli chcesz za każdym razem zmniejszać pisanie, możesz zmodyfikować
.bash_profile
plik i umieścićNastępnie z terminala
source ~/.bash_profile
. Następnie, jeśli wpiszeszremote_scp
swój terminal, powinien on uruchomićscp
polecenie bez hasła.źródło
upewnij się, że masz narzędzie „oczekuj”, jeśli nie, zrób to
# apt-get install expect
utwórz plik skryptu o następującej treści. (# vi / root / scriptfile)
spawn scp /path_from/file_name user_name_here@to_host_name:/path_to
expect "password:"
send put_password_here\n;
interact
uruchom plik skryptu za pomocą narzędzia „expect”
# expect /root/scriptfile
źródło
Oto przykład podobny do Linuksa / Pythona / Oczekiwania biedaka oparty na tym wpisie na blogu: Uaktualnianie prostych powłok do w pełni interaktywnych TTY . Potrzebowałem tego na starych komputerach, na których nie mogę zainstalować Oczekiwać ani dodawać modułów do Pythona.
Kod:
Wynik:
źródło
Alternatywą byłoby dodanie publicznej połowy klucza użytkownika do pliku kluczy autoryzowanych w systemie docelowym. W systemie, z którego inicjujesz transfer, możesz uruchomić demona ssh-agent i dodać do agenta prywatną połowę klucza. Zadanie wsadowe można następnie skonfigurować tak, aby korzystało z agenta w celu uzyskania klucza prywatnego, zamiast monitować o hasło klucza.
Powinno to być możliwe w systemie UNIX / Linux lub na platformie Windows za pomocą pageant i pscp.
źródło
Wszystkie powyższe rozwiązania mogą działać tylko wtedy, gdy aplikacja jest zainstalowana lub powinieneś mieć uprawnienia administratora do zainstalowania oprócz lub sshpass.
Znalazłem ten bardzo przydatny link, aby po prostu uruchomić SCP w tle.
https://charmyin.github.io/scp/2014/10/07/run-scp-in-background/
źródło
kroki, aby uzyskać sshpass Dla rhel / centos 6:
źródło: https://community.mapr.com/thread/9040
źródło
Znalazłem tę naprawdę pomocną odpowiedź tutaj .
Nie tylko możesz przekazać tam hasło, ale także pokaże pasek postępu podczas kopiowania. Naprawdę niesamowite.
źródło