Wykonaj scp-then-ssh w jednym połączeniu


0

Zarówno w pracy, jak i w domu często wykonuję następujące czynności:

$ scp "SomeScriptIJustCreatedOrModified.sh" some-server:
$ ssh some-server ./SomeScriptIJustCreatedOrModified.sh arguments

A czasem też ta odmiana:

$ scp "SomeScriptIJustCreatedOrModified.sh" some-server:/tmp
$ ssh some-server -t sudo -u other_user /tmp/SomeScriptIJustCreatedOrModified.sh arguments

Chodzi o to, że serwer często znajduje się w innym kraju, a uzgadnianie SSH zwykle zajmuje co najmniej kilka sekund --- i ten pozorny krótki czas oczekiwania może szybko się zestarzeć, a także przeszkodzić w tworzeniu długich list serwerów. Co więcej, byłem wcześniej krytykowany za tworzenie podejrzanie szybkich kolejnych połączeń SSH.

Jak to osiągnąć?


Zrób alias w swoim .bashrc?
Adam

@Adam jedno połączenie, a nie jedno polecenie.
Ekevoo,

2
Spójrz na użycie controlmaster, otwiera jedno połączenie z serwerem i podczas gdy to połączenie jest otwarte, wszystkie przyszłe połączenia ssh lub scp używają tego samego połączenia i nie wymagają podawania poświadczeń. puppetlabs.com/blog/speed-up-ssh-by-reusing-connections
Adam

Mój plik .ssh / config wygląda następująco: pastebin.com/8SHV8g3k
Adam

Dlaczego po prostu nie jesteś zalogowany na zdalnym serwerze zamiast nawiązywać połączenie za każdym razem?
jjlin

Odpowiedzi:


2

Spróbuj spojrzeć na controlmaster. Otwiera pojedyncze połączenie ssh i umożliwia przyszłym połączeniom ssh i scp przechodzenie przez to samo połączenie, więc nie trzeba ponownie podawać hasła ani czekać na otwarcie połączenia.

Oto przykład konfiguracjicontrolmaster .

Edytuj .ssh/configplik, aby uwzględnić linie:

Host hostname                                                                                                          
    User username                                                                                                  
    HostName hostname                                                                                                        
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p

Gdzie hostnamei usernamesą zastępowane odpowiednimi informacjami.


0

Jeśli masz dostęp do ssh na serwerze, zawsze możesz użyć klienta sftp, takiego jak ExpanDrive, aby zamontować zdalny katalog domowy na komputerze lokalnym. Następnie możesz po prostu napisać skrypt lokalnie w edytorze tekstu i zapisać go na lokalnym komputerze zdalnym.

W tym momencie będzie na serwerze, a wszystko, co musisz zrobić, to ssh i uruchomić go. Dopóki utrzymujesz otwarte połączenia sftp i ssh, możesz zapisywać i uruchamiać tyle skryptów, ile chcesz, przez cały dzień, a będziesz musiał połączyć się tylko raz dla sftp i raz dla ssh.

Pamiętaj tylko, że przy takim przepływie pracy za każdym razem, gdy zapiszesz, będziesz pisać na zdalnym serwerze, a on będzie pisał tak szybko, jak pozwalają na to ograniczenia systemu operacyjnego i sieci (tj. Będzie wolniejszy niż zapis lokalny).


Dzięki, ale to dobre rozwiązanie tylko dla scenariusza z jednym serwerem.
Ekevoo

Możesz połączyć się z wieloma serwerami jednocześnie w Expandrive. W przypadku ssh możesz użyć ekranu lub kart w terminalu, aby otworzyć wiele połączeń jednocześnie.
wbr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.