머리말
회사에서는 개발용으로 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.s
h 就是指定了脚本解释器 /bin/sh
来解释执行脚本;常见的脚本解释器还有:/bin/bash
等,我们可以使用ls -l /bin/*sh
며칠 전 동료들이 기술을 공유하고 있을 때 저는 그는 ./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;
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*" // 期待匹配到 'user_name@ip_string's password:' 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_profile
或source ~./bash_profile
在当前脚本执行一遍设置别名命令,完成设置;
这样,我们无论在哪个目录,只要输入alias_name
命令,回车,真正的一键登陆!
위 내용은 SSH 자동 로그인을 구현하기 위한 쉘에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!