RPi3 Raspbian Stretch下SSH向TTY1传输登录输入的问题
嘿,我来帮你搞定这个树莓派tty1登录的问题!
首先得搞懂你遇到的核心问题:你直接往/dev/tty1写字符的操作,只是把内容显示在屏幕上而已,负责处理登录的getty/login进程根本没把这些当成用户输入。这就像你在屏幕上贴了一张写着“pi”的纸条,系统不会认为你真的敲了键盘。login是从终端的输入队列读取数据的,不是从输出流里拿,所以单纯的echo操作自然触发不了密码输入环节。
下面给你几个可行的解决方案,挑适合你的来用:
方案1:用expect+openvt自动完成整个登录流程
这个方法能模拟真实的键盘输入,自动帮你输入用户名和密码:
- 先装expect工具:
sudo apt-get install expect
- 写个小脚本(比如叫
auto_login_tty1.exp):
#!/usr/bin/expect -f set timeout 10 # 在tty1启动login进程 spawn openvt -s -w -c 1 login # 等待登录提示 expect "login:" # 发送用户名pi+回车 send "pi\r" # 等待密码提示 expect "Password:" # 替换成你的pi用户密码,再发送回车 send "你的pi密码\r" # 保持会话交互 interact
- 给脚本加执行权限:
chmod +x auto_login_tty1.exp
- SSH远程执行就行:
sudo ./auto_login_tty1.exp
方案2:用kbd工具模拟真实按键
kbd包里的sendkey能直接给tty发送键盘事件,相当于真的按了键盘:
- 先装kbd:
sudo apt-get install kbd
- 发送用户名和回车到tty1:
sudo sendkey -s /dev/tty1 pi sudo sendkey -s /dev/tty1 return
之后再发送密码和回车:
sudo sendkey -s /dev/tty1 你的pi密码 sudo sendkey -s /dev/tty1 return
方案3:直接切换tty并su(快速登录)
如果只是想跳过登录提示直接在tty1进入pi用户,用这个更简单:
sudo chvt 1 && echo "你的pi密码" | sudo su - pi
这个命令会先切到tty1,然后自动完成su登录,直接进入pi的会话。
最后再啰嗦一句:你之前试的各种echo、printf,本质都是往屏幕输出字符,不是真的模拟输入,所以不管怎么换换行回车都没用,得用能和终端输入队列交互的工具才行。
内容的提问来源于stack exchange,提问作者nejdetckenobi
相关产品推荐
相关产品推荐

