在下面的脚本中,aserver 和 bserver 工作正常。但在上面的“cserver”情况下,在 su - gsxuserp 之后,我需要使用同一用户执行以下三个选项。
cd ..
cd random_directory
tail -f file_in_random_directory
我无法使用 -c 选项来执行此操作,因为连接只是关闭而不执行任何操作。有人可以建议一个基本方法来做到这一点吗?
echo "Please type one of the following: aserver,bserver,cserver:"
read input
echo "You entered: $input"
case "$input" in
"aserver")
echo "Logging into a. Please enter the passwords when prompted"
ssh -t [email protected] "ssh -t aserver "su - gsxp -c "sqlplus grep_ro/pwd"""
;;
"bserver")
echo "Logging into b. Please enter the passwords when prompted"
ssh -t [email protected] "ssh -t bserver "su - gsxp -c "sqlplus grep_ro/pwd"""
;;
"cserver")
echo "Logging into c. Please enter the passwords when prompted"
ssh -t [email protected] "ssh -t cserver "su - gsxuserp -c "cd """
;;
*)
echo "Incorrect Option entered. Exiting the script"
;;
esac
答案1
为什么不直接使用呢su - gsxuserp -c "tail -f ../random_directory/file_in_random_directory"
?
多个su
没有意义,因为每个都启动一个新会话,执行单个命令,然后关闭。后面的不记得前面的目录在哪个目录,它们每次都会继承调用脚本的目录。
完整的命令是(在其他答案中引用引用评论),
ssh -t [email protected] ssh -t cserver 'su - gsxuserp -c \"tail -f ../random_directory/file_in_random_directory\"'
请注意单引号和双引号(以及转义双引号)的使用,而不仅仅是一系列双引号。
答案2
这不是一个答案,更多的是需要额外格式化的评论。
您的引用是错误的:双引号不嵌套,它们会切换:
ssh -t [email protected] "ssh -t bserver "su - gsxp -c "sqlplus grep_ro/pwd"""
# .... unquoted ..........^..quoted.......^..unquoted...^....quoted.........^^^
您实际的 ssh 命令具有以下参数:
ssh -t \
[email protected] \
"ssh -t bserver " \
su \
- \
gsxp \
-c \
"sqlplus grep_ro/pwd"
这更理智一些:
ssh -t [email protected] ssh -t bserver "su - gsxp -c 'sqlplus grep_ro/pwd'"