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/bashSSH 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 sftpalt sistemi talep ederse, varsayılan olarak OpenSSH sunucusu /usr/lib/openssh/sftp-serverkullanı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_configdosyaya. 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 readmeaynı 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 .bashrctamamen 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.