ssh tünelleme sadece erişim


31

Ssh (linux üzerinde) sadece tünel açmaya izin verecek şekilde yapılandırılabilir mi? Diğer bir deyişle, kullanıcı tünelleri ayarlayabilir ancak bir kabuk / erişim dosyası bulamıyor mu?

Yanıtlar:


42

Evet, sadece /bin/falsekabuk olarak kullanın ve kullanıcıdan herhangi bir uzak komut çalıştırmadan tünelleme SSH işlemini başlatmasını isteyin (örn. -NOpenSSH bayrağı):

ssh -N -L 1234:target-host:5678 ssh-host

Um, kullanıcı kullanmazsa -N, kabuk erişimine sahiptir. Bu gerçekten sorunu çözmez ve tehlikelidir.
mlissner

12
@mlissner: Hayır, eğer /bin/falsekabuğunuz varsa, her giriş oturumu derhal sona ereceği için, kabuk erişiminiz olmayacak.
Sven

10

Kullanıcının .ssh / approved_keys dosyasına, aşağıdakine benzer bir şey koyun:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

Yani, temelde, kontroller kullanıcının boşluk bırakarak kullanıcının açık anahtarının önünde olacaktı. Örnekte, belirli ortak anahtarı kullanan bağlantıların yalnızca 192.168.1.10 MySQL sunucusuna ve 10.0.0.16 web sunucusuna SSH bağlantı noktası iletmesine izin verilecek ve bir kabuk atanmamış (pty). Özellikle "pty no" seçeneği hakkında soru soruyorsun, ancak kullanıcının yalnızca belirli sunuculara tünel yapması gerekiyorsa diğerleri de yararlı olabilir.

Yetkili_keys dosyası için daha fazla seçenek için sshd man sayfasına bakın .

Kullanıcı deneyiminin biraz tuhaf görünebileceğini unutmayın: ssh girdiklerinde, oturum asılı gibi görünecektir (bir çörek almadıkları için). Bu iyi. Kullanıcı, örneğin, "-L3306: 192.168.1.10: 3306" ile bağlantı noktası iletmeyi belirlediyse, bağlantı noktası iletme işlemi hala geçerli olacaktır.

Her durumda, bir deneyin.


6
Bu tehlikeli bir tavsiye ; no-ptyKabuk erişimini engellemez, sadece kabuğa bir miktar vermez. Bilgi istemini görüntülemiyor (yani "asılı görünüyor"), ancak yine de komutları verebilirsiniz. Oradan kabuk erişimini kısıtlamak istiyorsanız bu command="..."seçeneğe ihtiyacınız .ssh/authorized_keysvar.
Aleksi Torhamo

@AleksiTorhamo doğru, ancak bu bir başlangıç; Ayrıca kabuğu tamamen kısıtlamak için / usr / sbin / nologin veya / bin / false komutlarını / usr / sbin olarak ayarlamanız gerekir. Aleksi'nin tavsiyesi ile birlikte bunu yansıtmak için yukarıdaki yazıyı düzenledim.
Jamieson Becker,

4

Kullanıcıya, yalnızca çıkış yapmalarına izin veren bir kabuk verin. /bin/press_to_exit.sh

#! / Bin / bash
read -n 1 -p "Çıkmak için herhangi bir tuşa basın" tuşu

Bu şekilde, tünelleri aktif halde çalıştığı halde istediği süre boyunca giriş yapabilir, ancak komutları çalıştıramaz. Ctrl-cbağlantıyı kapatır.


3
En azından teoride, kullanıcının CTRL + C'ye doğru anda (1. ve 2. satırlar arasında) vurabileceği ve tam bir bash kabuğu ile sonuçlanabileceğini düşünüyorum.
andreas-h

2

Kullanıcının oturum açmasına izin vermeyen bir kabuk atayın.

Örneğin

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

bir kabuk istemi almalarını engeller ve 60 saniyelik bir zaman aşımı süresi sağlar - 60 saniye boyunca aktif bir bağlantı yoksa o zaman çıkar ve böylece tamamen çıkarır (gereksinimlere göre sayısını artırır).

Uzak bir komutu da yürütemezler, çünkü o kabuk onlara izin vermez.


4
Çoğu linux kurulumu zaten bunun için bir şeyler ile birlikte geliyor. / sbin / nologin veya / bin / false veya benzeri.
Rory

1
Yukarıdaki örnekte Ctrl-C ne yapar?
Arjan

Arjan: Betik kabuk olarak kullanıldığından, Ctrl-C logoutnormalde " " ile aynı etkiye sahip olacaktır .
Grawity

2
Aslında "-N" seçeneğiyle earl’ın tepkisini seviyorum, ancak kullanıcılarınıza yardımsever, arkadaşça ve bilgilendirici bir mesaj vermek istiyorsanız - ve SSH bağlantılarını her yere bırakmalarını istiyorsanız - o zaman özel bir betik güzel ve anlaşılır ne yapıyor
jrg

2
@jrg Bu tartışma eski ve fikrinizi değiştirmiş olabilirsiniz :) ama IMHO el yapımı kabuk betikleri ile ortaya çıkması tehlikeli. İçinde, /sbin/nologinkullanıcı dostu bir mesajla özelleştirebileceğiniz zaten var /etc/nologin.txt.
dr01

0

Benim çözümüm, sadece tünel olabilir kullanıcıyı sağlamaktır interaktif kabuk olmadan o kabuğun ayarlanması için, / etc / passwd için / usr / bin / tunnel_shell .

Sadece yürütülebilir dosya oluşturmak / usr / bin / tunnel_shell bir ile sonsuz döngüye .

Ek olarak AllowGroupsve Match Groupseçeneğinden yararlanın.

Tam burada açıklanmıştır: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
Kullanıcı bir şekilde yürütülebilir dosyadan çıkıp bir kabuktan kaçabilir. Çalıştırılabilir uygulamanızın buna izin vermeyeceğinden emin misiniz?
dr01

2
@ dr01 Dürüst olmak gerekirse, bunun% 100 güvenli olduğundan emin değilim. Yürütülebilir dosyadan çıktığınızda, SSH oturumu da sonlandırılıyor. Bunu daha fazla araştırıp burada tekrar yorum yapabilirim.
Daniel W.
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.