Genel olarak bash
Bash'in başlangıç dosyaları ile ilgili tasarımı oldukça tuhaf. .bashrc
İlişkisiz iki durumda basma yükleri :
Genel olarak SSH hakkında
SSH protokolü üzerinden bir komut yürüttüğünüzde, komut tel üzerinden bir dize olarak iletilir. Dize uzak kabuk tarafından yürütülür. Çalıştırdığınızda ssh example.com somecommand
, uzak kullanıcının oturum açma kabuğu /bin/bash
SSH sunucusu çalışır /bin/bash -c somecommand
. Giriş kabuğunu atlamanın bir yolu yoktur. Bu, kısıtlı oturum açma kabuklarına izin verir, örneğin, genel komut yürütmesine değil , yalnızca dosya kopyalamaya izin verir .
Bir istisna vardır: SSH protokolü, istemcinin belirli bir alt sistem istemesine izin verir. İstemci sftp
alt sistemi talep ederse, varsayılan olarak OpenSSH sunucusu /usr/lib/openssh/sftp-server
kullanıcının oturum açma kabuğu aracılığıyla programı çağırır (konum değişebilir). Ancak, hat üzerinden dahili bir SFTP sunucusu çalıştıracak şekilde de yapılandırılabilir
Subsystem sftp internal-sftp
içinde sshd_config
dosyaya. Dahili SFTP sunucusu için ve yalnızca bu durumda, kullanıcının oturum açma kabuğu atlanır.
Bu meydan okuma için
OverTheWire Haydut 18 durumunda .bashrc
,
…
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
…
echo 'Byebye !'
exit 0
Böylece bash'ın interaktif olmamasına neden olan bir şey yaparak bu seviyeyi çözebilirsiniz.
Keşfettiğiniz gibi, SFTP çalışır.
Ama ssh bandit18@bandit.labs.overthewire.org cat readme
aynı zamanda işe yarar.
Olduğu gibi echo 'cat readme' | ssh bandit18@bandit.labs.overthewire.org
.
Ve interaktif bir giriş sırasında Ctrl + C tuşlarına doğru zamanda basmak da işe yarayacaktır: bash'ı kesecekti, bu yüzden .bashrc
tamamen yürütülmeyecekti. Bash'ın başlatılması makroskopik zaman alır, bu nedenle bu güvenilir bir şekilde çalışmazken, pratikte yapılabilir.