详解shell实现SSH自动登陆

Jan 25, 2020 pm 04:44 PM
shell ssh

详解shell实现SSH自动登陆

前言

公司开发使用docker,每次登陆自己开发机总要输入 ssh user_name@ip_string,然后再确认输入password,手快了还经常会输错。作为一个懒人,肯定要找一个取巧的方式,查看了下ssh命令,由于它要进行一次跟服务器的加密交互,所以没有直接附带密码登陆的选项,只好作罢。

推荐:《Linux教程》

前些天在同事进行技术分享时,看到他竟然只输入了一行命令./test.sh就成功登陆了开发机,甚是惊异,于是回来搜索研究了一下,遂成此文。

shell脚本基础

在编写ssh自动登陆脚本之前,先说一下shell脚本的基础,此基础不是一些语法什么的,网上到处都是,这里总结了一下shell脚本的运行机制~

shell脚本的运行方式

首先要说一下shell的几种启动方式,正是踩了脚本启动的坑,才使用原来十分钟就搞定的脚本,花了两个小时才搞定。同时也使得我们运行shell,知其所以然。

通过文件名执行

shell脚本可以直接通过文件名执行,需要注意的是文件需要执行权限。通过 sudo chmod +x ./file_name.sh 来给文件添加执行权限;

指定脚本解释器来执行文件

我们常用的 sh file_name.sh 就是指定了脚本解释器 /bin/sh来解释执行脚本;常见的脚本解释器还有:/bin/bash等,我们可以使用ls -l /bin/*sh命令来查看当前可用的脚本解释器;

使用. ./file_name或source命令执行脚本

这种方式不会像前两种方式一样fork一个子进程去执行脚本,而是使用当前shell环境执行,用于 .bashrc或者.bash_profile被修改的时候,我们不必重启shell或者重新登录系统,就能使当前的更改生效。

shebang

我们写一个shell脚本时,总是习惯在最前面加上一行 #!/binbash,它就是脚本的shebang,至于为什么叫这么个奇怪的名字,C语言和Unix的开发者丹尼斯·里奇称它为可能是类似于"hash-bang"的英国风描述性文字;

贴一段wiki上的解释:

在计算机科学中,Shebang是一个由井号和叹号构成的字符串行,其出现在文本文件的第一行的前两个字符。 在文件中存在Shebang的情况下,类Unix操作系统的程序载入器会分析Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数。

简单的说,它指示了此脚本运行时的解释器,所以,使用文件名直接执行shell脚本时,必须带上shebang; 此外,我们还可以在shebang后面直接附加选项,执行时我们默认使用选项执行;

如 test.sh的shebang为 #!/bin/sh -x,那我们执行脚本时:

./test.sh hello
Salin selepas log masuk

相当于:

bin/sh -x ./test.sh hello;
Salin selepas log masuk

而编写一个ssh自动登陆脚本,需要用到的shebang(解释器)为 /usr/bin/expect;

需要注意的是:在指定脚本解释器来执行脚本时,shebang会被指定的脚本解释器覆盖,即优先使用指定的脚本解释器来执行脚本(习惯性地用sh ./test.sh却提示command not found)

expect解释器

expect是一个能实现自动和交互式任务的解释器,它也能解释常见的shell语法命令,其特色在以下几个命令:

spawn命令:

spawn command命令会fork一个子进程去执行command命令,然后在此子进程中执行后面的命令;

在ssh自动登陆脚本中,我们使用 spawn ssh user_name@ip_str,fork一个子进程执行ssh登陆命令;

expect命令:

expect命令是expect解释器的关键命令,它的一般用法为 expect "string",即期望获取到string字符串,可在在string字符串里使用 * 等通配符;

string与命令行返回的信息匹配后,expect会立刻向下执行脚本;

set timeout命令:

set timeout n命令将expect命令的等待超时时间设置为n秒,在n秒内还没有获取到其期待的命令,expect 为false,脚本会继续向下执行;

send命令:

send命令的一般用法为 send "string",它们会我们平常输入命令一样向命令行输入一条信息,当然不要忘了在string后面添加上 \r 表示输入回车;

interact命令:

interact命令很简单,执行到此命令时,脚本fork的子进程会将操作权交给用户,允许用户与当前shell进行交互;

完成脚本

以下是一个完成版的脚本 test.sh:

#!/usr/bin/expect                   // 指定shebang
set timeout 3                       // 设定超时时间为3秒
spawn ssh user_name@172.***.***.*** // fork一个子进程执行ssh命令
expect "*password*"                 // 期待匹配到 'user_name@ip_string's password:' 
send "my_password\r"                // 向命令行输入密码并回车
send "sudo -s\r" 
send "cd /data/logs\r"              // 帮我切换到常用的工作目录
interact                            // 允许用户与命令行交互
Salin selepas log masuk

执行 sudo chmod +x ./test.sh命令给shell脚本添加执行权限;

运行 ./test.sh命令,一键登陆成功!

简单的几个命令,,搭配起来解决了与命令行的交互问题后,很多复杂的功能也不在话下了~

alias别名

脚本完成了,可是还是有些小瑕疵:

输入./file_name.sh命令太长。。。

只能在脚本目录中才能执行,不然使用绝对路径输出的命令更长。

这里我们想到了linux的alias命令:

alias命令:

alias命令使用方式为 alias alias_name="ori_command",将alias_name设置为ori_command的别名,这样我们输入执行alias_name,就相当于执行了ori_command;

可是,我们会发现,当你关闭当前shell后,再打开一个shell窗口,再使用alias_name,系统提示command not found;

有没有能保持命令的方式呢?编辑bash_profile文件。

bash_profile文件

我们编辑bash_profile文件,此文件会在终端窗口创建的时候首先执行一次,所以可以帮我们再设置一次别名;

执行命令vim ~./bash_profile,在文件内部添加:

alias alias_name="/root_dir/../file_name.sh
Salin selepas log masuk

保存后,再使用 . ~./bash_profilesource ~./bash_profile 在当前脚本执行一遍设置别名命令,完成设置;

这样,我们无论在哪个目录,只要输入alias_name命令,回车,真正的一键登陆!

Atas ialah kandungan terperinci 详解shell实现SSH自动登陆. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Telnet dalam Tutorial Lengkap Windows 11 [Pemasangan/Pendayaan dan Penyelesaian Masalah] Telnet dalam Tutorial Lengkap Windows 11 [Pemasangan/Pendayaan dan Penyelesaian Masalah] May 22, 2023 pm 09:35 PM

<p>Telnet ialah singkatan daripada "Rangkaian Terminal". Ia adalah protokol yang boleh digunakan pengguna untuk menyambungkan satu komputer ke komputer tempatan. </p><p>Di sini, komputer tempatan merujuk kepada peranti yang memulakan sambungan dan komputer yang disambungkan ke komputer tempatan dipanggil komputer jauh. </p><p>Telnet dijalankan pada prinsipal klien/pelayan, dan walaupun ia sudah lapuk, ia masih digunakan oleh ramai orang pada tahun 2022. Ramai orang telah pun bertukar kepada sistem pengendalian Windows 11, iaitu sistem pengendalian terkini yang ditawarkan oleh Microsoft. &

Explorer.exe tidak bermula pada permulaan sistem [Betulkan] Explorer.exe tidak bermula pada permulaan sistem [Betulkan] Jun 03, 2023 am 08:31 AM

Pada masa kini, ramai pengguna Windows mula menghadapi masalah sistem Windows yang serius. Masalahnya ialah Explorer.exe tidak boleh bermula selepas sistem dimuatkan dan pengguna tidak boleh membuka fail atau folder. Walaupun, pengguna Windows boleh membuka Windows Explorer secara manual menggunakan Command Prompt dalam beberapa kes dan ini mesti dilakukan setiap kali sistem dimulakan semula atau selepas permulaan sistem. Ini boleh menjadi masalah dan disebabkan oleh faktor-faktor berikut yang dinyatakan di bawah. Fail sistem rosak. Dayakan tetapan permulaan pantas. Pemacu paparan lapuk atau bermasalah. Perubahan telah dibuat pada beberapa perkhidmatan dalam sistem. Fail pendaftaran yang diubah suai. Dengan mengingati semua faktor di atas, kami telah menghasilkan beberapa yang pasti akan membantu pengguna

Pengaturcaraan pelayan Python: Menggunakan Paramiko untuk melaksanakan operasi jauh SSH Pengaturcaraan pelayan Python: Menggunakan Paramiko untuk melaksanakan operasi jauh SSH Jun 18, 2023 pm 01:10 PM

Dengan pembangunan pengkomputeran awan dan Internet of Things, pengendalian jauh pelayan telah menjadi semakin penting. Dalam Python, kita boleh menggunakan modul Paramiko untuk melaksanakan operasi jauh SSH dengan mudah. Dalam artikel ini, kami akan memperkenalkan penggunaan asas Paramiko dan cara menggunakan Paramiko dalam Python untuk mengurus pelayan dari jauh. Apakah Paramiko Paramiko ialah modul Python untuk SSHv1 dan SSHv2 yang boleh digunakan untuk menyambung dan mengawal klien SSH

Bagaimana untuk memadamkan baris dengan cepat pada penghujung fail dalam Linux Bagaimana untuk memadamkan baris dengan cepat pada penghujung fail dalam Linux Mar 01, 2024 pm 09:36 PM

Apabila memproses fail di bawah sistem Linux, kadangkala perlu memadamkan baris pada penghujung fail. Operasi ini sangat biasa dalam aplikasi praktikal dan boleh dicapai melalui beberapa arahan mudah. Artikel ini akan memperkenalkan langkah-langkah untuk memadamkan baris dengan cepat pada penghujung fail dalam sistem Linux dan memberikan contoh kod khusus. Langkah 1: Semak baris terakhir fail Sebelum melakukan operasi pemadaman, anda perlu mengesahkan baris mana yang merupakan baris terakhir fail. Anda boleh menggunakan arahan tail untuk melihat baris terakhir fail Arahan khusus adalah seperti berikut: tail-n1filena

OpenSSH pada Windows: Panduan Pemasangan, Konfigurasi dan Penggunaan OpenSSH pada Windows: Panduan Pemasangan, Konfigurasi dan Penggunaan Mar 08, 2024 am 09:31 AM

Bagi kebanyakan pengguna Windows, Remote Desktop Protocol (RDP) sentiasa menjadi pilihan pertama untuk pengurusan jauh kerana ia menyediakan antara muka grafik yang mesra. Walau bagaimanapun, bagi pentadbir sistem yang memerlukan kawalan yang lebih terperinci, SSH mungkin lebih sesuai dengan keperluan mereka. Melalui SSH, pentadbir boleh berinteraksi dengan peranti jauh melalui baris arahan, yang boleh menjadikan pengurusan berfungsi dengan lebih cekap. Kelebihan SSH ialah keselamatan dan fleksibilitinya, memudahkan pentadbir melaksanakan kerja pengurusan dan penyelenggaraan jauh, terutamanya apabila berurusan dengan sejumlah besar peranti atau melaksanakan tugas automatik. Jadi sementara RDP cemerlang dari segi kemesraan pengguna, bagi pentadbir sistem, SSH lebih unggul dalam kuasa dan kawalan. Sebelum ini, pengguna Windows perlu meminjam

Konfigurasi kepercayaan bersama log masuk SSH Linux Konfigurasi kepercayaan bersama log masuk SSH Linux Feb 19, 2024 pm 07:48 PM

1. Tujuan ssh saling percaya 1. SSH saling percaya diperlukan apabila membina kelompok, yang kondusif untuk memudahkan operasi pada nod lain. 2. Apabila menggunakan operasi salinan jauh scp, anda perlu memasukkan nama pengguna dan kata laluan pelayan sasaran Pada masa ini, anda boleh mengkonfigurasi kepercayaan bersama SSH antara pelayan Linux, supaya anda boleh log masuk tanpa kata laluan apabila beroperasi antara berbilang. pelayan Linux. 2. Prinsip konfigurasi saling percaya ssh Secara ringkasnya, pelayan menyimpan sijil hos sasaran supaya pengesahan boleh diselesaikan secara automatik tanpa memasukkan kata laluan. 3. Langkah konfigurasi saling percaya SSH 1. Setiap nod menjana kunci awam dan pasangan kunci persendirian sendiri. 2. Hantar fail kunci awam anda kepada pihak lain. 3. Sahkan sama ada konfigurasi kepercayaan bersama berjaya. 4. Konfigurasikan ssh saling percaya di sini dengan MYDB01 dan

Bagaimana untuk menyambung ke pangkalan data Mysql dari jauh menggunakan Python berdasarkan ssh Bagaimana untuk menyambung ke pangkalan data Mysql dari jauh menggunakan Python berdasarkan ssh May 27, 2023 pm 04:07 PM

Latar Belakang: Jika anda perlu mengakses pangkalan data Mysql pelayan jauh, tetapi untuk tempoh keselamatan pangkalan data Mysql, langkah keselamatan ditetapkan untuk hanya membenarkan sambungan tempatan (iaitu, anda perlu log masuk ke pelayan untuk menggunakannya ), dan sambungan jauh lain tidak boleh diakses secara langsung, dan Port yang sepadan juga telah diubah suai, jadi anda perlu menyambung ke pangkalan data berdasarkan ssh. Menyambung ke pangkalan data dengan cara ini adalah sama seperti antara muka dalam Navicat berdasarkan sambungan ssh. Navicat menyambung ke perpustakaan sokongan pemasangan pangkalan data Jika anda ingin menyambung ke Mysql, anda perlu memasang pymysqlpipinstallpymysql untuk memasang perpustakaan berasaskan ssh sshtunnelpipinstallsshtunnel#.

109 contoh skrip shell praktikal, kodnya jelas dan mudah digunakan! 109 contoh skrip shell praktikal, kodnya jelas dan mudah digunakan! Aug 02, 2023 pm 03:25 PM

Skrip Shell menggunakan fungsi tafsiran perintah Shell untuk menghuraikan fail teks biasa dan kemudian melaksanakan fungsi ini Ia juga boleh dikatakan bahawa skrip Shell ialah koleksi siri arahan.

See all articles