Neden% h'yi OpenSSH ssh'ın ControlPath seçeneğinde kullanmıyorsunuz?


13

Neden "ssh_config (5)" sayfaları , paylaşılan her bağlantıyı benzersiz olarak tanımlamak için ControlPathseçeneğin en azından ve ve yer tutucularını içermesini öneriyor ?%h%p%r

Birden fazla oturumun aynı soketi aynı ana bilgisayara bağlantı ile paylaşması gerektiğini düşündüm . O zaman aşağıdaki gibi basit bir tanımlamaya sahip olmak anlamlı olmaz mı:

ControlPath ~/.cache/ssh/mux/%h

Gibi bir şey yerine:

ControlPath ~/.cache/ssh/mux/%r@%h:%p

İlk tanımı anladığım kadarıyla, bir bağlantı farklı uzak kullanıcılarla birden fazla oturum arasında, aynı uzak ana bilgisayara, farklı uzak bağlantı noktalarında paylaşılıyor.

Söylemeye yetecek kadar ana varsayılan bölümünde ilk tanım olmasını istiyorum ssh -o ControlMaster=no.

Uzak kullanıcı ve uzak bağlantı noktası ne olursa olsun, aynı yerel kullanıcı tarafından başlatılan tüm oturumlar arasında aynı uzak ana bilgisayarla bağlantıyı paylaşmak istiyorum. Ana istemcinin soketi yerel kullanıcının ana dizininin altında olmalıdır.


"Uzak kullanıcı ve uzak bağlantı noktası ne olursa olsun, aynı yerel kullanıcı tarafından başlatılan tüm oturumlar arasında aynı uzak ana bilgisayarla bağlantıyı paylaşmak istiyorum." Kısa cevap: yapamazsınız . Cevabıma bir tür açıklama ekledim.
goldilocks

Yanıtlar:


13

"Birden fazla oturumun aynı soketi aynı ana bilgisayara bağlantıyla paylaşması gerektiğini düşündüm."

Yapabilirler. Ancak, ControlPathhangi ana bilgisayar olarak oturum açmayı planladığınızdan bağımsız olarak mevcut bir bağlantıyı kullanarak bir ana bilgisayara bağlanırsanız , bağlantının orijinal kullanıcısı olarak oturum açacağınızı unutmayın. Örneğin, "bir yerlere" kurulan hiçbir bağlantısı olmayan:

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere

Bu oturum bir yerlerde bob @.

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere

Bu oturum aynı zamanda bir yerde bob @ olacaktır , çünkü aynı ControlPath'i kullandınız ve ayarladınız ControlMaster=no; eğer ControlMaster=yes, siz sue olarak oturum olurdu, ancak örtülü olarak ssh, senin ControlPath argüman gözardı olacak man ssh_config:

ControlMaster, 'no' olarak ayarlanmış aynı ControlPath'i kullanarak ek oturumlar bu sokete bağlanabilir .

Bunun kanıtı olarak, eğer ControlMaster=yesher iki durumda da, bob çıktığı zaman ~/.ssh/somewhere"dava" oturumu hala çalışıyor olsa bile , ControlPath soketi kaybolur, yani dava oturumu hiçbir zaman bu soketi kullanmaz .

Aynı bağlantıyı kullanmak istiyorsanız %h, sorun yok, ancak bir bağlantıyı birden fazla farklı uzak kullanıcı olarak paylaşamayacağınıza dikkat edin - ssh size izin vermeyecektir.


Çok teşekkürler. Ayrıntılı cevabınızdan önce, bir müşterinin ana soketini farklı uzak kullanıcılar arasında, aynı zamanda ikinci uzak kullanıcı birincinin kimliğini kabul etmeden paylaşmanın mümkün olmadığı gerçeğini kaçırdım.
Tim Friske

5

Aynı sunucu için birden fazla kullanıcınız ve birden fazla bağlantı noktanız olabilir. Kendim, şirketin intranetlerindeki yüzlerce sisteme bağlanıyorum, çoğunun farklı işlevlere veya uygulama sunucularına sahip birden fazla kullanıcısı var. A kullanıcısına erişim userB'ye erişimden çok farklıdır ve ana bağlantının farklı olması gerekir. Daha kısaca, eğer koşacak olsaydınız:

$ ssh -n -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userA localhost sleep 10 & # create the master connection and background it
$ ssh -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userB localhost whoami
userA

Gördüğünüz gibi, userB ile bir OpenSSH oturumu değil, userA ile orijinal bir oturum almıyoruz. Bu, giriş dizininin, izinlerin ve hatta kimlik doğrulamasının kendisinin beklendiği gibi olmadığı anlamına gelir. Bunu kullanarak, userB dizinindeki bir dosyayı silmeye çalışacaksanız, o zaman a) yanlış dosya olabilir ve b) yanlış izinler olabilir.

Eğer olacaksa asla tek bağlantı noktasını kullanarak herhangi bir sunucu üzerinde tek bir kullanıcı birden fazla bağlanma olması, o zaman evet, kullanılarak %hyeterli olabilir. Senin içinde ~/.ssh/configdosyanın, kullanmak isteyeyim:

ControlMaster=auto  # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes

ControlPersistSeçenek ile ana bağlantı, öldürülünceye veya sonlandırılana kadar arka planda açık kalır ssh -O exit. Bu güzel bir ayarla ve unut özelliği.

Ama eğer herhangi herhangi bir ana bilgisayarda birden fazla kullanıcı için bağlantı imkanı, o zaman bir şey daha güvenli isteyeyim:

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes

Hala kafam karıştı. Yapılandırma senaryosunu ve "Yapmak istiyorum" paragraflarındaki amacımı açıklamaya çalıştım. Herhangi biriniz bu ek bilgilerle sorumu daha kesin olarak cevaplayabilir mi?
Tim Friske
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.