>  기사  >  운영 및 유지보수  >  SSH 자동 로그인을 구현하기 위한 쉘에 대한 자세한 설명

SSH 자동 로그인을 구현하기 위한 쉘에 대한 자세한 설명

藏色散人
藏色散人앞으로
2020-01-25 16:44:193593검색

SSH 자동 로그인을 구현하기 위한 쉘에 대한 자세한 설명

머리말

회사에서는 개발용으로 docker를 사용합니다. 개발 머신에 로그인할 때마다 항상 ssh user_name@ip_string을 입력합니다. 그런 다음 password 입력을 확인하세요. 속도가 빠르면 실수를 자주 하게 됩니다. 게으른 사람으로서 트릭을 찾아야 겠습니다. 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

추천: "Linux 튜토리얼"

며칠 전 동료들이 기술을 공유하고 있을 때 저는 그는 ./test.sh 명령 한 줄만 입력하여 개발 머신에 성공적으로 로그인했을 때 매우 놀랐고, 다시 찾아와 연구를 하다가 마침내 이 글을 작성하게 되었습니다.

셸 스크립트의 기본

ssh 자동 로그인 스크립트를 작성하기 전에 먼저 셸 스크립트의 기본 사항에 대해 이야기해 보겠습니다. 이 기본 사항은 문법이나 기타 내용이 아니라 인터넷에 있는 모든 내용을 요약한 것입니다. 쉘 스크립트의 메커니즘~

쉘 스크립트 실행 방법

우선 쉘을 시작하는 여러 가지 방법에 대해 이야기해 보겠습니다. 원래 10분 정도 걸리던 스크립트를 사용한 것은 스크립트 시작의 함정 때문이었습니다. 완료. 완료하는 데 2시간이 걸렸습니다. 동시에 쉘을 실행하고 그 이유를 알 수도 있습니다.

파일명을 통한 실행

셸 스크립트는 파일명을 통해 직접 실행될 수 있습니다. 해당 파일에는 실행 권한이 필요하다는 점에 유의하세요. sudo chmod +x ./file_name.sh 를 통해 파일에 실행 권한을 추가합니다.

파일을 실행할 스크립트 해석기를 지정합니다

우리는 일반적으로 sh file_name.s를 사용합니다. code >h는 스크립트를 해석하고 실행하기 위한 스크립트 해석기 <code>/bin/sh를 지정합니다. 일반 스크립트 해석기에는 /bin/bash 등이 포함됩니다. 를 사용할 수 있습니다. ls -l /bin/*sh 명령을 사용하여 현재 사용 가능한 스크립트 해석기를 확인하세요.

../file_name 또는 source 명령을 사용하여 스크립트를 실행하세요.

이 방법은 첫 번째 방법과 동일하지 않습니다. 두 가지 방법 스크립트를 실행하기 위해 하위 프로세스를 포크하지만 실행을 위해 현재 쉘 환경을 사용합니다. .bashrc 또는 .bash_profile이 수정되면 현재 변경 사항을 적용하기 위해 쉘을 다시 시작하거나 시스템에 다시 로그인할 필요가 없습니다. 효과.

shebang

우리는 쉘 스크립트를 작성할 때 항상 앞에 #!/binbash라는 줄을 추가하는데, 이것이 스크립트의 쉐뱅인데 왜 이렇게 이상한 이름으로 불리는지에 대해 C언어 개발자들은. Unix Dennis Ritchie는 이를 "hash-bang"과 유사할 수 있는 영국식 설명 텍스트라고 불렀습니다.

위키에 설명 게시:

컴퓨터 과학에서 shebang은 파운드 기호와 느낌표로 구성된 문자입니다. 텍스트 파일의 첫 번째 줄의 처음 두 문자로 나타나는 Serial을 표시합니다. 파일에 Shebang이 존재하면 Unix 계열 운영체제의 프로그램 로더는 Shebang 이후의 내용을 분석하여 이 내용을 인터프리터 명령어로 사용하고 명령어를 호출하며 Shebang이 포함된 파일 경로를 인터프리터 매개변수로 사용합니다.

간단히 말하면 이 스크립트가 실행될 때 인터프리터를 나타냅니다. 따라서 파일 이름을 사용하여 쉘 스크립트를 직접 실행할 때는 추가로 shebang을 가져와야 하며, 이때 shebang 뒤에 옵션을 직접 추가할 수도 있습니다. 실행 시 기본적으로 옵션을 사용하여 실행합니다.

예를 들어, test.sh의 shebang은 #!/bin/sh -x이고, 스크립트를 실행할 때:

./test.sh hello

는 다음과 같습니다.

bin/sh -x ./test.sh hello;
ssh 자동 로그인 스크립트, shebang(인터프리터)을 사용해야 합니다: /usr/bin/expect;

스크립트를 실행하기 위해 스크립트 인터프리터를 지정할 때 지정된 스크립트 인터프리터가 shebang을 덮어쓰게 된다는 점에 유의해야 합니다. 즉, 지정된 스크립트 인터프리터를 먼저 사용하여 스크립트를 실행합니다. (저는 습관적으로 sh ./test.sh를 사용하지만 프롬프트 명령을 찾을 수 없습니다.)

expectinterpreter

expect는 자동 및 대화형을 구현할 수 있는 인터프리터입니다. 또한 일반적인 셸 구문 명령을 해석할 수 있습니다.

spawn 명령:

spawn 명령은 하위 프로세스를 분기하여 명령 명령을 실행한 다음 이 하위 프로세스에서 후속 명령을 실행합니다. 🎜🎜ssh 자동 로그인 스크립트에서는 generate ssh user_name@ip_str을 사용하고 하위 프로세스를 분기하여 ssh 로그인 명령을 실행합니다. 🎜🎜🎜expect 명령: 🎜🎜🎜expect 명령은 Expect 인터프리터의 핵심 명령입니다. 일반적인 사용법은 "문자열"입니다. 즉, 문자열 문자열에 *와 같은 와일드카드를 사용할 수 있습니다. 🎜🎜문자열이 명령줄에서 반환된 정보와 일치하면 Expect는 즉시 스크립트를 실행합니다. 🎜🎜set timeout 명령: 🎜🎜🎜set timeout n command 예상 명령의 대기 시간 제한을 n초로 설정합니다. 예상되는 명령이 n초 내에 획득되지 않으면 예상은 false이고 스크립트는 계속 실행됩니다. 🎜🎜send 명령: 🎜🎜🎜send 명령의 일반적인 사용법 "문자열"을 보내려면 일반적으로 명령을 입력할 때 명령줄에 메시지를 입력합니다. 물론 Enter를 나타내기 위해 문자열 뒤에 r을 추가하는 것을 잊지 마세요. ; 🎜🎜🎜상호작용 명령: 🎜🎜

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

完成脚本

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

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

执行 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

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

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

위 내용은 SSH 자동 로그인을 구현하기 위한 쉘에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제