Saya perlu mentransfer file log ke host jarak jauh menggunakan sftp dari host Linux. Saya telah diberikan kredensial untuk hal yang sama dari grup operasi saya. Namun, karena saya tidak memiliki kendali atas host lain, saya tidak dapat membuat dan membagikan kunci RSA dengan host lain.
Jadi apakah ada cara untuk menjalankan sftp
perintah (dengan nama pengguna / kata sandi yang disediakan) dari dalam skrip Bash melalui pekerjaan cron ?
Saya menemukan pertanyaan Stack Overflow yang serupa, Tentukan kata sandi untuk sftp dalam skrip Bash , tetapi tidak ada jawaban yang memuaskan untuk masalah saya.
SSHPASS=password sshpass -e ...
harus dilakukan.sshpass -p "my_password" sftp -oPort=9999 user@host:dir/file.log
-oBatchMode=no
adalah bagian penting yang hilang bagi saya.Cara lain adalah dengan menggunakan lftp:
Kerugian dari metode ini adalah bahwa pengguna lain di komputer dapat membaca kata sandi dari alat seperti
ps
dan bahwa kata sandi dapat menjadi bagian dari riwayat shell Anda.Alternatif yang lebih aman yang tersedia sejak LFTP 4.5.0 adalah mengatur
LFTP_PASSWORD
variabel lingkungan dan menjalankan lftp bersama--env-password
. Ini contoh lengkapnya:LFTP juga menyertakan fitur mirroring keren (dapat menyertakan hapus setelah transfer dikonfirmasi
--Remove-source-files
):sumber
put-script
:open sftp://user:password@host; put local-file.name; exit
Dari jalankanlftp -f put-script
Dengan cara ini Anda tidak harus memiliki nama pengguna dan kata sandi di baris perintah dan dapat mengatur izin terbatas untuk file skrip Anda.lftp
daripada dipusingkan dengansftp
dansshpass
. Jawaban yang bagus.Harapkan adalah program yang bagus untuk digunakan.
Di Ubuntu instal dengan:
Pada Mesin CentOS instal dengan:
Katakanlah Anda ingin membuat koneksi ke server sftp dan kemudian mengunggah file lokal dari mesin lokal Anda ke server sftp jarak jauh
Ini membuka koneksi sftp dengan kata sandi Anda ke server.
Kemudian masuk ke direktori tempat Anda ingin mengunggah file Anda, dalam hal ini "logdirectory"
Ini mengunggah file log dari direktori lokal yang ditemukan di / var / log / dengan nama file menjadi file.log ke "logdirectory" di server jarak jauh
sumber
Anda dapat menggunakan lftp secara interaktif dalam skrip shell sehingga kata sandi tidak disimpan dalam .bash_history atau serupa dengan melakukan hal berikut:
Tambahkan yang berikut ke file Anda:
Dan tulis / keluar editor vi setelah Anda mengedit host, pengguna, pass, dan direktori untuk mengetikkan file put Anda.
:wq
Kemudian buat skrip Anda dapat dieksekusichmod +x test_script.sh
dan jalankan./test_script.sh
.sumber
Saya baru-baru ini diminta untuk beralih dari ftp ke sftp, untuk mengamankan pengiriman file antar server. Kami menggunakan paket Tectia SSH, yang memiliki opsi
--password
untuk meneruskan kata sandi pada baris perintah.contoh:
sftp --password="password" "userid"@"servername"
Contoh batch:
Saya pikir saya harus membagikan informasi ini, karena saya melihat berbagai situs web, sebelum menjalankan perintah bantuan (
sftp -h
), dan saya terkejut melihat opsi kata sandi.sumber
ps
perintah akan dapat melihat kata sandi Anda.unknown option -- - usage: sftp [-1246aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-R num_requests] [-S program] [-s subsystem | sftp_server] host sftp [user@]host[:file ...] sftp [user@]host[:dir[/]] sftp -b batchfile [user@]host
Anda dapat mengganti dengan mengaktifkan otentikasi yang lebih sedikit. Tetapi Anda harus menginstal kunci (pub, priv) sebelum pergi untuk itu.
Jalankan perintah berikut di server lokal.
Tekan ENTER untuk semua opsi yang diminta. Tidak ada nilai yang perlu diketik.
Terhubung ke server jauh menggunakan perintah berikut
Jalankan perintah berikut di server jauh
Jalankan perintah berikut di server lokal untuk menguji otentikasi tanpa kata sandi. Itu harus terhubung tanpa kata sandi.
sumber
lftp -p ${port} -u ${login_id},${password} ${ip_number}
ketika dipanggil dari skrip shell mencetaknya di suatu tempat? Bagaimana Anda menyelesaikannya selain sshpass?lftp
dan mengandalkansshpass
dari Mac dan Linux keduanya.Gabungkan sshpass dengan file kredensial yang dikunci dan, dalam praktiknya, seaman apa pun - jika Anda mendapatkan root pada kotak untuk membaca file kredensial, semua taruhan tetap tidak aktif.
sumber
Program Bash untuk menunggu sftp untuk meminta kata sandi lalu kirimkan bersama:
Anda mungkin perlu menginstal mengharapkan, mengubah kata-kata 'Kata Sandi' menjadi huruf kecil 'p' untuk mencocokkan dengan apa yang diterima oleh prompt Anda. Masalahnya di sini adalah itu mengekspos kata sandi Anda dalam teks biasa dalam file serta dalam sejarah perintah. Yang hampir mengalahkan tujuan memiliki kata sandi di tempat pertama.
sumber
Anda dapat menggunakan sshpass untuk itu. Berikut langkah-langkahnya
sudo apt-get install sshpass
sshpass -p '#Password_For_remote_machine' scp /home/ubuntu/latest_build/abc.war #user@#RemoteIP:/var/lib/tomcat7/webapps
sumber