Bagaimana cara membuka sesi bash penyamaran?

50

Apakah mungkin membuka sesi penyamaran bash?

Misalnya, ketika kita perlu memasukkan kata sandi dalam perintah dan tidak ingin bashmenambahkannya ke riwayat.

Sudoer
sumber
9
cat | bashakan menjalankan non-interaktif bashtanpa pengeditan baris perintah yang cepat (hanya editor internal disiplin baris) atau riwayat.
Stéphane Chazelas
Tulis spasi di depan perintah Anda: 'secretcommand'. Sekarang secrectcommandtidak akan berada dalam bash history.
Martin Thoma

Jawaban:

79

Saat Anda ingin bashberhenti mencatat perintah Anda, hapus saja HISTFILEvariabelnya:

HISTFILE=

Semua perintah selanjutnya seharusnya tidak lagi dicatat .bash_history.

Di sisi lain, jika Anda benar-benar memasok kata sandi sebagai argumen untuk perintah, Anda sudah melakukan sesuatu yang salah. .bash_historytidak dapat dibaca dunia dan karenanya bukan ancaman terbesar dalam situasi ini:

psdan /procmerupakan masalah besar. Semua pengguna di sistem dapat melihat perintah yang sedang Anda jalankan dengan semua argumen mereka . Melewati kata sandi sebagai argumen baris perintah karenanya tidak aman . Gunakan variabel lingkungan atau file konfigurasi (yang telah Anda buat 600) untuk memasok kata sandi dengan aman.

Martin von Wittich
sumber
5
Saya telah menggunakan Linux 10+ tahun dan tidak pernah berpikir untuk melakukan ini +1
eyoung100
3
unset HISTFILEmemiliki efek yang serupa. Saya memiliki fungsi untuk ini: n() { HISTFILE=; PS1="~${PS1#\~}"; }. Dengan begitu saya bisa melihat dengan jelas apakah saya dalam "mode penyamaran" atau tidak.
Lekensteyn
13
+1 untuk mengatasi masalah sebenarnya daripada hanya menjawab pertanyaan. Opsi tambahan untuk meneruskan kredensial adalah soket domain Unix.
Nathan Osman
1
Tip lain yang bermanfaat adalah meletakkan spasi sebelum yaitu "HISTFILE =". perintah apa pun dengan spasi sebelum tidak dicatat.
FUD
Hal keren lainnya tentang ini adalah bahwa bahkan perintah sebelumnya pada jendela itu juga diabaikan. Ini seperti membalikkan sesi yang ada ke penyamaran: p
Uzumaki D. Ichigo
37
HISTCONTROL=ignorespace

Jika opsi ini belum ditetapkan bash, mungkin hanya itu yang Anda butuhkan. Ini kurang melemahkan daripada menonaktifkan semua riwayat. Dengan set itu, perintah apa pun yang dimulai dengan karakter spasi tidak akan disimpan ke daftar riwayat.

Dari tautan terkait ini:

Mengapa bash memiliki opsi HISTCONTROL = ignorespace?

Mengapa bash tidak menyimpan perintah yang dimulai dengan spasi?

Timothy Martin
sumber
6
Perhatikan ini sering merupakan default.
Ángel
3

Anda dapat menonaktifkan sementara riwayat: set +o history

set +o history
...
set -o history

Ada perbedaan antara penonaktifan histori dan unsetting HISTFILE:

HISTFILE=
date
ls
HISTFILE=~/.bash_history
history

menampilkan sesuatu seperti ini:

84  HISTFILE=
85  date
87  ls
88  HISTFILE=~/.bash_history
89  history

yaitu semua perintah disimpan dalam daftar riwayat. Ketik exituntuk menyimpannya.
Tapi

set +o history
date
ls
set -o history
history

menampilkan sesuatu seperti ini:

115  set +o history
116  history

Ringkasan :
set +o historyuntuk sesi panjang.
HISTCONTROLdan <space>commanddi waktu lain.

Evgeny Vereshchagin
sumber